在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形式添加,不赘述了