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);
}
阅读 4.7k
1 个回答

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

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)
            }
        }
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题