Swift UIViewController 实现通常使用默认 属性 值,还是在 viewDidLoad 中初始化属性?
Is it conventional for Swift UIViewController implementations to use default property values, or to initialize properties in viewDidLoad?
在 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 中的默认 属性 值。
现在说 Swift 中的传统内容还为时过早。我们还在编造。 Apple 的示例代码是出了名的糟糕指南(编程指南始终是更好的选择)。阅读开发论坛通常是了解 Swift 团队认为好的东西的更好方法 Swift(但风格会随着语言的变化而变化)。
在很多情况下,在声明中赋值可能是最好的方法,只要你能做到。有些东西在 viewDidLoad
之前不可用,因此您不能更早地初始化它们。
在 ObjC 中,将东西放在 init
中并不是很好,因为 init
通常不会被调用。你最终不得不把东西放在 init
和 initWithCoder:
中(这意味着你需要将初始化提升到另一个方法中,比如 "setup")。还有一些关于 init
如何与 initWithNibName:bundle:
集成的歌舞,这可能会咬你,因为那是指定的初始化器(不是 init
)。你必须非常小心。
所有这些通常导致 ObjC 代码将大部分初始化放在 viewDidLoad
中,因为它更可靠(至少从 iOS 6 开始,他们摆脱了 viewDidUnload
)。
关键在于,即使在 ObjC 中,这也不是一个简单的问题。但是在 Swift 中,我想说放置模型的更好的地方是在默认初始化器中,就像你说的那样,然后像在 ObjC 中一样在 viewDidLoad
中完成其余的工作。但我们都还在想办法。
在 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 中的默认 属性 值。
现在说 Swift 中的传统内容还为时过早。我们还在编造。 Apple 的示例代码是出了名的糟糕指南(编程指南始终是更好的选择)。阅读开发论坛通常是了解 Swift 团队认为好的东西的更好方法 Swift(但风格会随着语言的变化而变化)。
在很多情况下,在声明中赋值可能是最好的方法,只要你能做到。有些东西在 viewDidLoad
之前不可用,因此您不能更早地初始化它们。
在 ObjC 中,将东西放在 init
中并不是很好,因为 init
通常不会被调用。你最终不得不把东西放在 init
和 initWithCoder:
中(这意味着你需要将初始化提升到另一个方法中,比如 "setup")。还有一些关于 init
如何与 initWithNibName:bundle:
集成的歌舞,这可能会咬你,因为那是指定的初始化器(不是 init
)。你必须非常小心。
所有这些通常导致 ObjC 代码将大部分初始化放在 viewDidLoad
中,因为它更可靠(至少从 iOS 6 开始,他们摆脱了 viewDidUnload
)。
关键在于,即使在 ObjC 中,这也不是一个简单的问题。但是在 Swift 中,我想说放置模型的更好的地方是在默认初始化器中,就像你说的那样,然后像在 ObjC 中一样在 viewDidLoad
中完成其余的工作。但我们都还在想办法。