首页 > Swift 里面如何用类似OC的runtime来给extension 加存储属性

Swift 里面如何用类似OC的runtime来给extension 加存储属性

如题,OC可以通过以下代码在category里面加属性,Swift如何在extension里面加存储属性啊

-(UIView *)statusBarMask{
return objc_getAssociatedObject(self, &statusBarMaskKey);
}
-(void)setStatusBarMask:(UIView *)statusBarMask{
objc_setAssociatedObject(self, &statusBarMaskKey, statusBarMask, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

存储属性 一般类创建实例后 很难 对其数据进行添加 所以 一般来说 存储属性 是无法增加的
可以根据这样的办法

extension CALayer {
    private struct AssociatedKeys {
        static var shapeLayer:CAShapeLayer?
    }

    var shapeLayer: CAShapeLayer? {
        get {
            return objc_getAssociatedObject(self, &AssociatedKeys.shapeLayer) as? CAShapeLayer
        }
        set {
            if let newValue = newValue {
                objc_setAssociatedObject(self, &AssociatedKeys.shapeLayer, newValue as CAShapeLayer?, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
            }
        }
    }
}
【热门文章】
【热门文章】