我知道我必须在这里遗漏一些明显的东西,但我似乎无法通过它的实际类型来引用目标View Controller。我已经从头开始创建了一个新项目,以便按照以下步骤进行测试:
将此代码添加到第一个View Controller:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
let vc: SecondViewController = segue.destinationViewController
vc.id = "test"
}
导致错误Cannot convert value of type 'UIViewController' to specified type 'SecondViewController'
。我已经尝试了所有我能想到的东西,尝试了所有的segue类型等,但是我没有想法。我知道segue本身正在工作,好像我注释掉它确实调用了第二个View Controller的代码(我甚至在指定中添加了一个标签,以确定)。
我是Swift和Storyboard的新手,所以这里可能很简单,我很遗憾,但是非常感谢任何帮助!
答案 0 :(得分:5)
您应该可以像这样设置值。
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if let vc: SecondViewController = segue.destinationViewController as? SecondViewController {
vc.id = "test"
}
}
如果添加其他segue,这将更安全。
另一种方法是强制使用
转换控制器override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
let vc: SecondViewController = segue.destinationViewController as! SecondViewController
vc.id = "test"
}
这段代码应该编译但是如果使用错误的destinationViewController调用它会崩溃而不是if let
选项,如果它不是,那就不会设置目标控制器的id值预期的课程。
答案 1 :(得分:0)
在Swift中,你可以使用guard
语句打开segue.destinationViewController
强制转换
guard let destVC : SecondViewController = segue.destinationViewController as? SecondViewController else {
return
}
destVC.id = "test"
或者对特定类型的UIViewController使用条件检查,其中值不是nil
if let destVC : SecondViewController? = segue.destinationViewController as? SecondViewController where destVC != nil {
destVC?.id = "test"
return
}