我想为 Swift 字符串添加一个额外的属性。我在对象上使用了这种方法几次,但它似乎不适用于结构。虽然,我没有得到任何错误......
这是我尝试过的:
var str = "Hello, StackOverflow"
fileprivate struct AssociatedKeys {
static var myBool = "myBool"
}
extension String {
public var myBool: Bool {
get {
guard let myBoolObject = objc_getAssociatedObject(self, &AssociatedKeys.myBool) as? NSNumber else {
return false
}
return myBoolObject.boolValue // execution never reaches this line
}
set(value) {
let object = NSNumber(value: value)
objc_setAssociatedObject(self, &AssociatedKeys.myBool, object, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}
}
}
str.myBool = true
print(str.myBool) // prints "false"
它打印出它是错误的。
起初,我没有将 Bool 包装到 NSNumber 中尝试过,但结果是一样的。
这甚至可以将关联对象添加到结构中吗?如果不是,谁能告诉我为什么?