關聯(lián)對象




關聯(lián)對象(Associated Object)

  • 在Swift中class依然可以使用關聯(lián)對象,結構體和枚舉是不可以使用關聯(lián)對象的。
  • 默認情況下extension不可以增加存儲屬性(因為修改了類的內(nèi)存結構),借助關聯(lián)對象,可以實現(xiàn)類似extension為class增加存儲屬性的效果。
import Foundation

class Person {}

extension Person {
    //使?void?可選類型,只占?個字節(jié),省內(nèi)存啊
    private static var AGE_KEY: Void?
    //private static var WEIGHT_KEY = false

    var age: Int {
        get {
            (objc_getAssociatedObject(self, &Self.AGE_KEY) as? Int) ?? 0
        }
        set {
            //第?個key是對象本身,第?個key是&Self.AGE_KEY,通過這兩個Key找到存儲的值
            // &Self.AGE_KEY:取出newValues的地址值
            // newValue:就是外?傳的值
            objc_setAssociatedObject(self, &Self.AGE_KEY, newValue, .OBJC_ASSOCIATION_ASSIGN)
        }
    }
}

var p = Person()
print(p.age) // 0
p.age = 10
print(p.age) // 10




【從OC到Swift】




?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容