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

时间:2016-08-02 20:27:26

标签: ios swift optional-arguments

如何初始化具有从前面的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 
}

1 个答案:

答案 0 :(得分:0)

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

class ChildVC{
     var set:ModelObject!

     override func viewDidLoad() {
        super.viewDidLoad()

        assert(set != nil)

     }

}

然后,您可以将代码保存在prepareForSegue: ParentVC中。