Swift如何借助Extension增加存储属性

2021-06-18  本文已影响0人  凯司机

// 关联对象(Associated Object)
// 在Swift中,class依然可以使用关联对象
// 默认情况,extension不可以增加存储属性
// 借助关联对象,可以实现类似extension为class增加存储属性的效果

class PersonL{}
extension PersonL {
    private static var AGE_KEY: Void?
    var age: Int {
        get {
            (objc_getAssociatedObject(self, &Self.AGE_KEY) as? Int) ?? 0
        }
        set {
            (objc_setAssociatedObject(self, &Self.AGE_KEY, newValue, .OBJC_ASSOCIATION_ASSIGN))
        }
    }
}

var personl = PersonL()
print(personl.age)
personl.age = 11
print(personl.age)

上一篇 下一篇

猜你喜欢

热点阅读