看完记不住,只好继续抄课文。
如果某个存储型属性的默认值需要特别的定制或者准备,就可以使用闭包或者全局函数来为其属性提供定制的默认值。每当某个属性所属的新类型实例创建时,对应的闭包或者函数会被调用,而他们的返回值会当做默认值赋值给这个属性。
这种类型的闭包或函数一般会创建一个跟属性类型相同的临时变量,然后修改它的值以满足预期的初始状态,最后将这个临时变量的值作为属性的默认值进行返回。
公式如下:
class SomeClass { let someProperty: SomeType = { // 在这个闭包中给 someProperty 创建一个默认值 // someValue 必须和 SomeType 类型相同 return someValue }() }
注意闭包结尾的大括号后面接了一对空的小括号。这是用来告诉Swift需要立刻执行此闭包。如果忽略了这对括号,相当于是将闭包本身作为值赋值给了属性,而不是将闭包的返回值赋值给属性。
Attention:
如果使用闭包来初始化属性的值,请记住在闭包执行时,示例的其他部分还没有初始化。这意味着不能够在闭包里反问其他的属性,就算这个属性有默认值也不允许。同样,不能使用隐式的self属性,或者调用其他的实例方法。