Swift UIViewController实现是否常规使用默认属性值,或者在viewDidLoad中初始化属性?

时间:2015-04-28 23:33:07

标签: swift uiviewcontroller initialization

UIViewController的Swift实现中,我们有机会使用默认属性值,而不必执行UIViewController初始化仪式。例如:

class ViewController: UIViewController {

    let model = SomeModelObject()

这种方法有什么影响,而不是在viewDidLoad中实例化模型属性?例如:

class ViewController: UIViewController {

    var model: SomeModelObject?

    override func viewDidLoad() {
        super.viewDidLoad()
        model = SomeModelObject()

如果分配给属性的对象始终以已知的方式实例化,那么设置默认属性值是否更有意义而不是将其设置为可选,并在viewDidLoad内为其赋值?在oC实现中,我们通常实现init,并使用if ([super init])惯用法有条件地初始化控制器属性。但是,在撰写本文时,似乎Apple的大多数示例代码都没有遵循Swift中的默认属性值。

1 个答案:

答案 0 :(得分:3)

现在说Swift的传统还为时尚早。我们仍然在弥补它。 Apple的示例代码是一个臭名昭着的糟糕指南(编程指南一直是更好的选择)。阅读devforums通常是一种更好的方式来了解Swift团队认为Swift的好处(但是随着语言的变化,样式也在发生变化)。

在许多情况下,在声明中分配值可能是最好的方法,只要你能做到。有些内容在viewDidLoad之前无法使用,因此您无法在之前初始化它们。

在ObjC中,将事物放在init中并不是那么好,因为通常不会调用init。最终必须将内容放在initinitWithCoder:中(这意味着您需要将初始化提升到另一种方法,如“setup”)。还有一些关于initinitWithNibName:bundle:整合的歌曲和舞蹈,可以咬你,因为那是指定的初始值(不是init)。你必须非常小心。

所有这些都经常导致ObjC代码将大多数初始化放在viewDidLoad中,因为它更可靠(至少从iOS 6开始,当他们摆脱viewDidUnload时)。

所有这一点,即使在ObjC中,这也不是一个简单的问题。但是在Swift中,我会说放置模型的更好的地方是默认的初始化器,就像你说的那样,并在viewDidLoad中像在ObjC中那样做。但我们仍然在搞清楚。