准备使用数组进行 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 8 和 Swift 3 在 SpriteKit 中以编程方式触发 segue
准备(用于 segue:UIStoryboardSegue,发件人:任何?)在 iOS 11 上的 Xcode 9 b6 中未调用