目前,我看到了一些奇怪的行为。
class DataManager1
{
let THE_ID = "SOME_ID_STRING"
let _con1 = CKContainer(identifier: THE_ID) // error
// error: 'DataManager1.Type' does not have a member named 'THE_ID'
}
class DataManager2
{
let THE_ID = "SOME_ID_STRING"
let _con1:CKContainer?
init()
{
_con1 = CKContainer(identifier: THE_ID) // no error.
}
}
在C ++中,我们在实例成员变量之间定义了一个初始化顺序。我期待类似的东西,但实际上我无法找到该手册的提及。
Swift是否有定义的属性初始化顺序?如果是的话,规则是什么,我在哪里可以找到规则?
答案 0 :(得分:3)
这是因为你使用Closure
(Function
只是一个未命名的Closure
的特殊情况)来初始化{{1具有默认值的属性。
来自Apple提供的iBook:
如果使用闭包初始化属性,请记住其余部分 该实例尚未初始化 关闭执行。这意味着您无法访问任何其他 封闭内的属性值,即使这些属性也是如此 有默认值。你也不能使用隐式自我属性, 或者调用任何实例的方法。
尽管上面的注释专门针对闭包,但似乎尝试将属性的默认值直接设置为另一个属性的默认值也不起作用。