工作生活

使用闭包来初始化属性值

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 控件的创建比较方便。

上一篇下一篇

猜你喜欢

热点阅读