准备使用数组进行 Segue - Xcode 8.0 Swift 3.0

Posted

技术标签:

【中文标题】准备使用数组进行 Segue - Xcode 8.0 Swift 3.0【英文标题】:Prepare For Segue With Array - Xcode 8.0 Swift 3.0 【发布时间】:2016-10-17 18:58:59 【问题描述】:

将项目添加到一个 VC 上的数组然后使用“准备转场”将数组转移到另一个 VC 的最佳方法是什么?到目前为止,这是我设法提出的:(VC1)

var items: [String] = ["Hello"]

(VC2):

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 

    var destViewController: ViewController = segue.destination as! ViewController
    destViewController.items = [textField.text!]
    items.append(textField.text!)

在 VC2 上出现一个错误,指出“使用未解析的标识符”行

items.append(textField.text!)

【问题讨论】:

直接使用destViewController.items.append(textField.text!) 我需要删除destViewController.items = [textField.text!] 并替换为destViewController.items.append(textField.text! 最后两行 当你说items.append 时,它会查看 VC2 的属性,因为它找不到任何它不知道如何处理的东西。这是面向对象编程的定义。认为美妙之处在于,如果您创建另一个对象,您可以对其自身调用它的属性,这样destViewController.items.apped(textField.text!)就会为您工作。 【参考方案1】:

我对 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
        
    

DestinationViewController.swift

class DestinationViewController: UIViewController 

    var receivedString: String?

    if let newString = receivedString 
        print(newString)
    
...

我意识到这与您的示例略有不同,但需要注意的重要一点是,当您创建“destinationVC”时,您可以修改它的属性。关键区别在于您必须在分配值或附加到数组时提供变量的范围(destinationVC.receivedString):

destViewController.items.append(textField.text!)

如果不提供范围,Xcode 将无法找到您尝试修改的变量(标识符),因为它不是当前文件的一部分或导入的一部分。

【讨论】:

那么我如何将附加项添加到数组中? 你会按照你展示的方式来做:destViewController.items.append(textField.text!)【参考方案2】:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
print("thank you very much for your helpful suggestions")
print("I think I am pointed at the right direction")
print("Thanks again for your generous contributions")
print("Apoligies! *** is pretty well automated to allow me to put it in non programatic format")

【讨论】:

【参考方案3】:

我将这段代码用于我的项目,以防您使用 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]

【讨论】:

以上是关于准备使用数组进行 Segue - Xcode 8.0 Swift 3.0的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 使用 segue 传递数组

无法使用 Xcode 8 和 Swift 3 在 SpriteKit 中以编程方式触发 segue

准备(用于 segue:UIStoryboardSegue,发件人:任何?)在 iOS 11 上的 Xcode 9 b6 中未调用

准备 segue 数组时不包含数据(使用 swift)

自定义幻灯片 Segue - Xcode 8.0 Swift 3.0

打印可变展开 Segue - Xcode 8.0 Swift 3.0