类拓展添加一个存储属性

本文探讨了在Swift和Objective-C(OC)中,如何通过扩展(分类)为已有类添加存储属性的问题。由于直接添加存储属性在扩展中是不允许的,文章提出使用关联对象作为替代方案,并提供了示例代码。作者还比较了直接使用关联对象与内部私有变量的方法,指出后者可能更为简洁且能保持属性私有。最后,文章提供了一种创建字典以存储多个属性的思路。
摘要由CSDN通过智能技术生成

在OC里面分类也是无法添加一个属性的,可以调用set 和get方法,但实际的值是无法存储的,解决的办法就是添加关联对象

在Swift里面拓展就相当于OC的分类,本身也是没法添加一个存储属性的,也是只能添加计算属性,和OC其实是一样的,解决办法也是添加关联对象

如图是直接添加存储属性直接报错

class Person {
    var name = "yk"
}
var reAge:Int = 0
extension Person
{
    var age:Int
    {
        set{objc_setAssociatedObject(self, &reAge, newValue, .OBJC_ASSOCIATION_ASSIGN) }
        get{objc_getAssociatedObject(self, &reAge) as! Int }
    }
}

上述代码就是关联对象,我一直是觉得,与其这样,不如

class Person {
    var name = "yk"
}
var reAge:Int = 0
extension Person
{
    var age:Int
    {
        set{reAge = newValue}
        get{reAge}
    }
}

不更加省事么,或者为了更加私有也可以

class Person {
    var name = "yk"
}

extension Person
{
    private static var reAge:Int = 0
    var age:Int
    {
        set{Person.reAge = newValue}
        get{Person.reAge}
    }
}

上述代码也能拓展一个存储属性,并且要更加私有,如果多,甚至可以创建一个字典以Key-value形式添加,不赘述了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值