我们可以在Swift中通过扩展添加静态存储变量吗?

时间:2016-10-18 07:24:52

标签: ios swift

在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

1 个答案:

答案 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