扩展加属性 swift

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

class Person {}
extension Person {
    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)
        }
    }
}

 

posted @ 2022-09-19 11:00  黄增松  阅读(69)  评论(0编辑  收藏  举报