setValue:forKey 总是在 swift 中崩溃

setValue:forKey is always crashing in swift

我有以下用例:

class Foo: NSObject {
    var bar = ""
}

let foo = Foo()
foo.setValue("A name", forKey: "bar") //throws exception: this class is not key value coding-compliant for the key bar.
print("Foo.bar: \(foo.bar)")

Apple 文档 (here) 表示,在 Swift 中,每个 class 子类化 NSObject 默认情况下都符合键值。如果是这样,为什么我会收到不符合键值的异常?

Swift objects that inherit from NSObject or one of its subclasses are key-value coding compliant for their properties by default.

我错过了什么吗?有谁知道问题出在哪里吗?

注意:我尝试制作“bar”属性 NSString,但我遇到了同样的异常。

实现对 属性 的 KVC(键值编码)支持。 你需要在 属性 上添加 @objc 注释, 由于目前KVC的实现是写在Objective-C,加上@objc后,Objective-c就可以看到了

class Foo: NSObject {
    @objc var bar = ""
}
let foo = Foo()
foo.setValue("A name", forKey: "bar")
print("Foo.bar: \(foo.bar)")