一尘不染

Swift 4“此类不符合键值编码”

swift

我有一个雨燕库,是严重依赖obj.valueForKey()NSObject

迁移到Swift 4之后,我发现这些调用总是会崩溃,并显示错误“该类不符合键的键值编码…”,除非使用声明了我要查找的属性@objc

现在是否必须声明@objc要使用此方法找到的属性?还有其他选择吗?


阅读 283

收藏
2020-07-07

共1个答案

一尘不染

当您执行迁移时,Xcode询问了@objc推断,您可能选择了新类型而不是Swift3。

可能的解决方案:

@objc

@objc根据需要在每个方法上使用而不是整个类。

@objcMembers

您可以@objcMembers在课堂上使用。

将@objcMembers属性应用于类会隐式将@objc属性添加到其所有与Objective-C兼容的成员。

使用Objective-
C行为编写Swift类和协议

请记住: 由于应用@objc属性可能会增加应用程序的编译大小并会对性能产生不利影响,因此 只有在每个成员都需要应用@objc属性时
才将@objcMembers属性应用于声明

将推理切换为旧行为

你也可以改变下的项目的行为: Build Settings> Swift 3 @objc Inference> On/Off

2020-07-07