在《Swift 编程语言 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
Run Code Online (Sandbox Code Playgroud)
您不能将存储的属性放入扩展的实例中,但您可以稍微作弊并通过 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)
}
}
Run Code Online (Sandbox Code Playgroud)
显然ValidationTypes要适当更换。
| 归档时间: |
|
| 查看次数: |
3710 次 |
| 最近记录: |