在Swift Programming Language 3.0一书中,它说我们不能使用扩展来添加存储的属性。
我用实例存储变量尝试了它,Xcode按预期显示错误。
但是当我尝试使用静态存储变量时,所有编译都很好。
我有什么遗漏或做错了吗?
class MyClass {}
extension MyClass {
static var one: Int {
return 1
}
static var two = 2 //compiled just fine
}
let myVariable = MyClass()
MyClass.two
答案 0 :(得分:0)
您不能将存储的属性放在扩展的实例中,您可以稍微作弊并使用Objective-C关联对象获得相同的效果。尝试使用以下代码:
private var associationKey: UInt8 = 0
var validationTypes: ValidationTypes {
get {
return objc_getAssociatedObject(self, &associationKey) as? ValidationTypes ?? []
}
set(newValue) {
objc_setAssociatedObject(self, &associationKey, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)
}
}
显然,视情况更换ValidationTypes
。