ios - setValue:forKey总是 swift 崩溃

标签 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)")
Apple文档(here)表示,在Swift中,每个包含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)")

关于ios - setValue:forKey总是 swift 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61693633/

相关文章:

ios - 在 -init、-viewdidload、-viewdidappear、-viewdiddisapper 上做什么

ios - UIScrollView 一个分页器

ios - countDownTimer = 0 的 UIDatePicker 显示 "0 hours 1 min"

iphone - [iOS]如何获取日历事件,将一个重复事件作为一个事件?

ios - 使用 Segue,如何在不同的 View Controller 中控制 View 的可见性?

ios - AutoID 的 Swift Firebase 数据库数组

ios - 无法理解 fetchRequest.predicate

swift - 如何使用可变数据源在 TableView 中按字母顺序制作节标题

ios - AudioKit:根据陀螺仪数据/摇摆手机改变声音?

ios - TestFlight Beta 测试 - 我们能否为不同的 1000 名外部测试人员提供同一应用程序的多个版本