swift 关联对象 扩展属性

457 阅读1分钟
class Animal { }

extension Animal {
//key使用占用内存小的类型Bool或Void?均为1个字节
	private static var AGE_KEY = Void?
    private static var WEIGHT_KEY = Void?
    
    var age: Int {
    	get {
        	objc_getAssociatedObject(self, &Self.AGE_KEY) as! Int
        }
        
        set {
        	objc_setAssociatedObject(self, &Self.AGE_KEY, newValue, .OBJC_ASSOCIATION_ASSIGN)
        }
    }
    
    var weight: Int {
    	get {
        	objc_getAssociatedObject(self, &Self.WEIGHT_KEY) as! Int
        }
        
        set {
        	objc_setAssociatedObject(self, &Self.WEIGHT_KEY, newValue, .OBJC_ASSOCIATION_ASSIGN)
        }
    }
}