如何初始化一个 Swift ViewController,它具有从前面的 ViewController 传递的非可选 属性?

How to initialize a Swift ViewController that has a non optional property passed from the preceding ViewController?

如何初始化一个 Swift ViewController,它具有从前面的 ViewController 传递的非可选 属性?

请假设:

所有 viewControllers 都在 mainStoryboard 中连接,并且在父级的 prepareForSegue 方法中将非可选 属性 设置为子级 ViewController。

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
        }
    }
}

集合属性 应该是非可选的,因为没有这个模型对象,ChildVC 就不能做它的事情。我将它与有问题的 属性 作为可选项一起使用,这导致了一个需要一些时间才能隔离的错误。通过强制将此 属性 设置为初始化的一部分,现在和将来都可以避免麻烦,因为 segue 模式一直出现。

class ChildVC{
var set:ModelObject 
}

声明 var set: ModelObject! 将为您提供非可选 属性。让你自己设置 属性 。但是警告,如果你在设置它之前使用 属性 (这不太可能看到你在 prepareForSegue 中设置:你的程序会崩溃!所以像 @dan 建议的那样做一个断言将是一个安全的测试,以确保你在使用之前设置您的变量。

class ChildVC{
     var set:ModelObject!

     override func viewDidLoad() {
        super.viewDidLoad()

        assert(set != nil)

     }

}

那你就可以只把你的代码在prepareForSegue:里和ParentVC里一样。