美文网首页
Swift实现类扩展添加属性

Swift实现类扩展添加属性

作者: 萤火驻守心间 | 来源:发表于2022-05-20 09:16 被阅读0次

Swift不允许在extension(类扩展)中直接添加属性。但是我们在实际开发中可能会遇到这种情况。
解决方案:使用objc_set/getAssociatedObject(关联属性)来实现。

场景一:给自定义button添加一个类扩展,关联name属性

class RightButton: UIButton {
    override init(frame: CGRect) {
        super.init(frame: frame)
        self.name = "123"
        self.setTitle(name, for: .normal)
    }
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

}
private var key: Void?
extension RightButton {
    var name: String?{
        get {
            return objc_getAssociatedObject(self, &key) as? String
        }
        set {
            objc_setAssociatedObject(self, &key, newValue, .OBJC_ASSOCIATION_RETAIN)
        }
    }
    
}

场景二:自定义协议btnProtocol,给协议的类扩展关联一个nick的只读属性,让自定义的button遵守该协议,获取该属性的值

protocol btnProtocol {
    var age: Int {get}
}

extension btnProtocol {
    var nick: String?{
        get {
            return "aaa"
        }
    }
}

相关文章

  • Swift实现类扩展添加属性

    Swift不允许在extension(类扩展)中直接添加属性。但是我们在实际开发中可能会遇到这种情况。解决方案:使...

  • kotlin 扩展属性

    与扩展方法类似,扩展属性当然也不是真正添加进了原类。 扒开糖衣看看kotlin扩展属性实现原理。 给Date类添加...

  • Swift入门基础6——扩展、泛型、协议

    扩展 Swift中的扩展,对应OC中的分类,可以用它来拓展类的功能。 可以扩展类的什么: 添加新的属性(只能是计算...

  • iOS - swift 拓展添加属性

    Swift不允许在extension(类扩展)中直接添加属性。 可以使用OC的关联属性(objc_set/getA...

  • Swift 中的扩展

    扩展的语法 计算属性 扩展可以为现有类型添加实例计算属性以及类计算属性。但不能添加存储属性,也不能为现有的属性添加...

  • 类的加载(三)

    类扩展 类扩展 VS 分类 category 专门用来给类添加新的方法 不能给类添加成员属性,添加了成员变量,也...

  • categories & extensions

    category:类别extensions:类扩展不同在于后者可以添加属性,另外后者添加的方法是必须实现的。ext...

  • 无标题文章

    类别,类扩展:category和extensions的不同在于 后者可以添加属性,另外后者添加的方法是必须要实现的...

  • [Swift]为Extension添加存储属性

    众所周知, 在Swift的扩展(Extension)中只能添加计算属性, 但是有时候, 我们需要添加存储属性的话,...

  • 如何在Swift扩展中添加存储属性

    .一般而言,swift的扩展Extension只能添加计算属性,不能添加存储属性。当然,如果利用run time也...

网友评论

      本文标题:Swift实现类扩展添加属性

      本文链接:https://www.haomeiwen.com/subject/lfltprtx.html