我熟悉在初始化所有属性之前尝试访问self
时遇到的错误。我从未理解的一件事是,为什么我可以在不依赖任何错误的情况下,在相同的static
中初始化具有static
常数的其他依赖项。
这种行为的原因是什么?为什么定义type
常量不给我编译时错误,而属性常量却给了我?
某些代码:
static
有必须有时会将该结构加载到内存中,或者有时加载静态变量。我看到的时间与创建struct MyStruct {
static let myStatic = 1
// No error on this line...
static let myStaticPlusOne = myStatic + 1
let myInstance = 1
// ... But a compile time error on this one! What makes the difference?
let myInstancePlusOne = myInstance + 1
}
的新实例的时间完全相同。我不能清楚地看到两者之间的区别。两者都有一个属性被初始化而另一个没有被初始化的时间。比起为什么我仍然可以从另一个静态变量访问我的静态变量?
类型和实例。
MyStruct类型始终存在。 type
属性属于该类型。因此,他们就坐在那里,可以做任何自己喜欢或以任何方式建立联系的事情。
每次您说static
时,都必须创建MyStruct的实例。当您这样说时,必须初始化实例属性。实例(不是MyStruct(...)
)属性属于该实例。因此,其初始值设定项的值不能引用static
,因为self
正是我们在创建实例(即实例)过程中所需要的值。这行:
self
...真的是]
let myInstancePlusOne = myInstance + 1
...但是,这恰恰是您不允许说的话;在初始化此属性时,尚没有
let myInstancePlusOne = self.myInstance + 1
,这是您正在初始化的内容。