我正在尝试将测试变量传递给目标控制器,但测试不成功。
我的表演在这里完成:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
programKeySegue = programKeys[indexPath.section]
self.performSegue(withIdentifier: "segueSelectedProgram", sender: self)
}
我的准备:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "segueSelectedProgam" {
let selectedProgramVC = segue.destination as! SelectedProgramTableViewController
selectedProgramVC.programKey = "test" //programKeySegue
}
}
并在目标控制器中:
var programKey: String?
但是当我在viewDidLoad' nil'中打印(programKey)时打印到控制台。我之前使用过这种方法,它一直很好用。谁能告诉我我做错了什么?
我厌倦了从准备segue中删除覆盖,我尝试将自己附加到performsegue上,我尝试分配不同的变量来传递。没有任何效果。
答案 0 :(得分:1)
如评论中所述,您的问题是由错字造成的。您可以通过不使用字符串比较来防止这种情况...
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// If there are multiple segues to this destination, you can
// perform a similar check on the source
if let selectedProgramVC = segue.destination as? SelectedProgramTableViewController
selectedProgramVC.programKey = "test" //programKeySegue
}
}
此外,您可以使用视图控制器名称作为故事板中的segue名称,然后...
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
programKeySegue = programKeys[indexPath.section]
self.performSegue(withIdentifier: String(describing: SelectedProgramTableViewController .self), sender: self)
}
et voila ...没有字符串!