能否在Xcode Playgrounds运行KVC?代码报错非键编码兼容求解决
解决KVC报错:对象不具备键编码兼容性的问题
嘿,我懂你被这个KVC错误折腾得头疼的感觉!别慌,这其实是Swift和Objective-C运行时交互的一个常见小坑,咱们一步一步来搞定它~
你遇到的核心问题是:KVC是Objective-C的老牌机制,但Swift里的属性默认不会自动暴露给Objective-C运行时——哪怕你的类已经继承了NSObject也没用。所以当你调用setValue(_:forKey:)时,系统找不到符合键值编码要求的属性,直接就抛出NSException了。
下面给你两种简单的解决方案,选哪种都能解决问题:
方案1:给单个属性添加@objc修饰符
直接在需要用KVC访问的属性前加上@objc,明确告诉Swift把这个属性暴露给Objective-C运行时:
import UIKit import Foundation class Student: NSObject { @objc var name: String = "" @objc var gradeLevel: Int = 0 } let seat1 = Student() seat1.setValue("Kelly", forKey: "name") print(seat1.name) // 会输出:Kelly
方案2:给整个类添加@objcMembers修饰符
如果你的类里有很多属性都需要用KVC操作,直接在类名前加@objcMembers,这样所有属性都会自动暴露给Objective-C运行时,不用逐个加@objc:
import UIKit import Foundation @objcMembers class Student: NSObject { var name: String = "" var gradeLevel: Int = 0 } let seat1 = Student() seat1.setValue("Kelly", forKey: "name") print(seat1.name) // 会输出:Kelly
不管是在Xcode Playground里测试,还是放到单视图应用的ViewController中,替换成上面的代码就能正常运行啦!
内容的提问来源于stack exchange,提问作者Laurence Wingo
相关产品推荐
相关产品推荐

