Ios setValue:forKey总是在swift中崩溃

Ios setValue:forKey总是在swift中崩溃,ios,swift,iphone,crash,key-value-coding,Ios,Swift,Iphone,Crash,Key Value Coding,我有以下用例: 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)&qu

我有以下用例:

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 documentation()指出,在Swift中,每个子类NSObject默认情况下都与键值兼容。如果是这样,为什么我会遇到不符合键值的异常

默认情况下,从NSObject或其子类继承的Swift对象的属性符合键值编码

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

注意:我试图将“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)")
实现对属性的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)")
答案是这样的。答案是这样的。