如何初始化具有从前面的ViewController传递的非可选属性的Swift ViewController?
请假设:
所有viewControllers都连接在mainStoryboard中,并且非可选属性设置为父级的prepareForSegue方法中的childViewController。
class ParentVC{
override func prepare(for segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "playlistsSegue" {
let vc = (segue.destination as! PlaylistsVC)
vc.set = attachedSet
vc.title = attachedSet?.name
}
}
}
set属性应该是非可选的,因为如果没有这个模型对象,ChildVC就无法做到这一点。我将它与有问题的属性一起作为可选项进行处理,这导致了一个需要一些时间来隔离的错误。通过强制将此属性设置为初始化故障的一部分,现在和将来都可以避免,因为segue模式始终显示。
class ChildVC{
var set:ModelObject
}
答案 0 :(得分:0)
声明var set: ModelObject!
将为您提供非可选属性。虽然让你自己设置属性。但是警告,如果你在设置它之前使用该属性(当你在prepareForSegue中设置时不太可能看到:你的程序会崩溃!所以做一个像@dan建议的断言将是一个安全的测试,以确保你设置你的使用前变量。
class ChildVC{
var set:ModelObject!
override func viewDidLoad() {
super.viewDidLoad()
assert(set != nil)
}
}
然后,您可以将代码保存在prepareForSegue:
ParentVC
中。