XZ_iOS 之为 Swift 的 Extension 添加 存储属性

我们在分类中添加存储属性时,往往会有一个 Extensions must not contain stored properties 的错误提醒,如下图:

解决这个问题就是给分类添加关联属性,主要用到的方法是:

public func objc_setAssociatedObject(_ object: Any, _ key: UnsafeRawPointer, _ value: Any?, _ policy: objc_AssociationPolicy)

public func objc_getAssociatedObject(_ object: Any, _ key: UnsafeRawPointer) -> Any?

为分类添加一个 UILabel 属性:

struct associatedKey {
     static var key = "xz_badge"
}      

private var xz_labelBadge: UILabel? {
        set {
            if let newValue = newValue {
                
                objc_setAssociatedObject(self, &(associatedKey.key), newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
            }
        }
        
        get {
            return objc_getAssociatedObject(self, &(associatedKey.key)) as? UILabel
        }
    }   
    

调用

xz_labelBadge = UILabel()
// 创建
xz_labelBadge?.layer.cornerRadius = 10
xz_labelBadge?.layer.masksToBounds = true
xz_labelBadge?.backgroundColor = .red
xz_labelBadge?.font = UIFont.systemFont(ofSize: 10)
xz_labelBadge?.textAlignment = .center
xz_labelBadge?.frame = CGRect(x: CGFloat(x), y: CGFloat(y), width: 20, height: 20)
// 添加红点
self.addSubview(xz_labelBadge!)
                                 
                    

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值