gpt4 book ai didi

swift - Swift UIViewController 实现通常使用默认属性值,还是在 viewDidLoad 中初始化属性?

转载 作者:搜寻专家 更新时间:2023-11-01 06:46:38 24 4
gpt4 key购买 nike

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]) 习惯用法来有条件地初始化 Controller 属性。然而,在撰写本文时,Apple 的大部分示例代码似乎并没有遵循 Swift 中的这种使用默认属性值的习惯用法。

最佳答案

现在说 Swift 中的约定俗成还为时过早。我们还在编造。 Apple 的示例代码是出了名的糟糕指南(编程指南始终是更好的选择)。阅读开发论坛通常是了解 Swift 团队认为什么是好的 Swift 的更好方式(但风格会随着语言的变化而变化)。

在很多情况下,在声明中赋值可能是最好的方法,只要你能做到。有些东西在 viewDidLoad 之前不可用,所以你不能更早地初始化它们。

在 ObjC 中,把东西放在 init 中并不是很好,因为经常init没有被调用。你最终不得不把东西都放在initinitWithCoder: (这意味着您需要将初始化提升到另一个方法,如“setup”)。关于如何 init 也有一些歌舞。与 initWithNibName:bundle: 集成这可能会咬你,因为那是指定的初始化器(不是 init )。你必须非常小心。

所有这些通常会导致 ObjC 代码将大部分初始化放在 viewDidLoad 中,因为它更可靠(至少从 iOS 6 开始,他们摆脱了 viewDidUnload )。

关键在于,即使在 ObjC 中,这也不是一个简单的问题。但是在 Swift 中,我会说放置模型的更好的地方是在默认初始化器中,就像你说的那样,然后在 viewDidLoad 中完成其余的工作。就像在 ObjC 中一样。但我们都还在想办法。

关于swift - Swift UIViewController 实现通常使用默认属性值,还是在 viewDidLoad 中初始化属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29931734/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com