使用闭包来初始化属性值
2019-07-03 本文已影响0人
Balopy
在Swfit中,如果你想确保属性只初始化一次,或创建一次对象,可以使用闭包来初始化属性的值,闲话少说,直接上代码,供大家参考。
class BLTestClass {
var testPp: String = {
// 在这个闭包中给 testPp 创建一个默认值
// someValue 必须和 String 类型相同
let tmp = "fsdfsa"
print("执行了")
return tmp
}()
init() {
self.testPp = "dfasdf"
self.testPp = "9090"
self.testPp = "dfa9999sdf"
self.testPp = "000000"
}
}
let some = BLTestClass.init()
let temp1 = some.testPp
let temp2 = some.testPp
let temp3 = some.testPp
print(temp3)// 打印的是最后一个值 000000
注意:
如果你使用闭包来初始化属性的值,请记住在闭包执行时,实例的其它部分都还没有初始化。
这意味着你不能够在闭包里访问其它的属性,就算这个属性有默认值也不允许。
同样,你也不能使用隐式的self属性,或者调用其它的实例方法。
另外,闭包设置默认值,只会执行一次,对于UI 控件的创建比较方便。