使用阵列准备Segue-Xcode 8.0 Swift 3.0

使用阵列准备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 {

在一个VC上将项目添加到数组中,然后使用“准备继续”将数组传输到另一个VC的最佳方法是什么?到目前为止,这是我设法想出的:(VC1)

(VC2):

在VC2上出现了一个错误,该错误在线路上表示“使用未解析标识符”

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!)