【问题标题】:Prepare For Segue With Array - Xcode 8.0 Swift 3.0准备使用数组进行 Segue - 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!)就会为您工作。

标签: swift xcode segue


【解决方案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! Stackoverflow 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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多