使用阵列准备Segue-Xcode 8.0 Swift 3.0
在一个VC上将项目添加到数组中,然后使用“准备继续”将数组传输到另一个VC的最佳方法是什么?到目前为止,这是我设法想出的:(VC1) (VC2): 在VC2上出现了一个错误,该错误在线路上表示“使用未解析标识符”使用阵列准备Segue-Xcode 8.0 Swift 3.0,swift,xcode,segue,Swift,Xcode,Segue,在一个VC上将项目添加到数组中,然后使用“准备继续”将数组传输到另一个VC的最佳方法是什么?到目前为止,这是我设法想出的:(VC1) (VC2): 在VC2上出现了一个错误,该错误在线路上表示“使用未解析标识符” items.append(textField.text!) 我对iOS/Swift还很陌生,但最近遇到了同样的情况。我是这样做的 SourceViewController.swift class SourceViewController: UIViewController {
items.append(textField.text!)
我对iOS/Swift还很陌生,但最近遇到了同样的情况。我是这样做的 SourceViewController.swift
class SourceViewController: UIViewController {
let stringToPass = "Hello World"
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let destinationVC = segue.destination as! DestinationViewController
destinationVC.receivedString = stringToPass
}
}
class DestinationViewController: UIViewController {
var receivedString: String?
if let newString = receivedString {
print(newString)
}
...
DestinationViewController.swift
class SourceViewController: UIViewController {
let stringToPass = "Hello World"
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let destinationVC = segue.destination as! DestinationViewController
destinationVC.receivedString = stringToPass
}
}
class DestinationViewController: UIViewController {
var receivedString: String?
if let newString = receivedString {
print(newString)
}
...
我意识到这与您的示例略有不同,但需要注意的是,当您创建“destinationVC”时,您可以修改它的属性。关键的区别在于,在赋值或追加到数组时,必须提供变量(destinationVC.receivedString)的作用域:
destViewController.items.append(textField.text!)
如果不提供作用域,Xcode无法找到您试图修改的变量(标识符),因为它不是当前文件的一部分或导入的一部分。我对iOS/Swift非常陌生,但最近遇到了相同的情况。我是这样做的 SourceViewController.swift
class SourceViewController: UIViewController {
let stringToPass = "Hello World"
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let destinationVC = segue.destination as! DestinationViewController
destinationVC.receivedString = stringToPass
}
}
class DestinationViewController: UIViewController {
var receivedString: String?
if let newString = receivedString {
print(newString)
}
...
DestinationViewController.swift
class SourceViewController: UIViewController {
let stringToPass = "Hello World"
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let destinationVC = segue.destination as! DestinationViewController
destinationVC.receivedString = stringToPass
}
}
class DestinationViewController: UIViewController {
var receivedString: String?
if let newString = receivedString {
print(newString)
}
...
我意识到这与您的示例略有不同,但需要注意的是,当您创建“destinationVC”时,您可以修改它的属性。关键的区别在于,在赋值或追加到数组时,必须提供变量(destinationVC.receivedString)的作用域:
destViewController.items.append(textField.text!)
如果不提供作用域,Xcode将无法找到您试图修改的变量(标识符),因为它不是当前文件或导入的一部分。
override func prepare(对于segue:UIStoryboardSegue,发送方:Any?){
打印(“非常感谢您的有用建议”)
打印(“我认为我指向了正确的方向”)
打印(“再次感谢您的慷慨捐助”)
print(“抱歉!Stackoverflow是非常自动的,允许我以非编程格式放置它”)
}
override func prepare(对于segue:UIStoryboardSegue,发送方:Any?){
打印(“非常感谢您的有用建议”)
打印(“我认为我指向了正确的方向”)
打印(“再次感谢您的慷慨捐助”)
print(“抱歉!Stackoverflow是非常自动的,允许我以非编程格式放置它”)
}
我将此代码用于我的项目,以防您使用UITableView:
// On first viewController
public override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "segue" {
let vc = segue.destination as! VC2
vc.data = sender as! [String]
}
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
var dataArray: [String] = []
dataArray.append(items[indexPath.row].id)
dataArray.append(items[indexPath.row].title)
dataArray.append( items[indexPath.row].details)
performSegue(withIdentifier: "segue", sender: dataArray)
}
只需进入第二个阵列
var data: [String] = []
id.text = data[0]
title.text = data[1]
details.text = data[2]
我将此代码用于我的项目,以防您使用UITableView:
// On first viewController
public override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "segue" {
let vc = segue.destination as! VC2
vc.data = sender as! [String]
}
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
var dataArray: [String] = []
dataArray.append(items[indexPath.row].id)
dataArray.append(items[indexPath.row].title)
dataArray.append( items[indexPath.row].details)
performSegue(withIdentifier: "segue", sender: dataArray)
}
只需进入第二个阵列
var data: [String] = []
id.text = data[0]
title.text = data[1]
details.text = data[2]
直接使用destViewController.items.append(textField.text!)我是否需要删除
destViewController.items=[textField.text!]
并将其替换为destViewController.items.append(textField.text!
最后两行当你说items.append
时,它会查看VC2的属性,因为它找不到任何它不知道如何处理的东西。这是面向对象编程的定义。虽然美妙之处在于如果你创建了另一个对象,你可以调用它自己的属性,所以destViewController.items.apped(textField.text!)
对您有效。直接使用它destViewController.items.append(textField.text!)我是否需要删除destViewController.items=[textField.text!]
并将其替换为destViewController.items.append(textField.text!
最后两行当你说items.append
时,它会查看VC2的属性,因为它找不到任何它不知道如何处理的东西。这是面向对象编程的定义。虽然美妙之处在于如果你创建了另一个对象,你可以调用它自己的属性,所以destViewController.items.apped(textField.text!)
对您有效。那么我如何将一个项目添加到数组中?您将完全按照显示的方式执行:destViewController.items.append(textField.text!)
那么我该如何向数组中添加附加项呢?您将完全按照显示的方式执行:destViewController.items.append(textField.text!)