斯威夫特 4 "This class is not key value coding compliant"



我有一个Swift库,该库在NSObject中依赖于obj.valueForKey()

迁移到Swift 4后,我发现这些呼叫总是会随着错误而崩溃:"此类不适合密钥的键值编码...",除非我要寻找的属性用@objc声明。

现在必须使用@objc声明属性以使用此方法找到属性?有其他吗?

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

可能的解决方案:

使用@objc

根据需要而不是整个班级使用@objc

使用@objcMembers

您只能在课堂上使用@objcMembers

将@objcmembers属性应用于类,隐式将@OBJC属性添加到其所有Objective-C兼容成员中。

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

请记住:,因为应用@OBJC属性可以增加应用程序的编译大小并不利地影响性能,仅应用@OBJCMembers属性,当每个成员都需要具有@OBJC属性的声明上应用

切换推断旧行为

您还可以更改项目的行为: Build Settings> Swift 3 @objc Inference>On/Off

相关问题:

  • 在Swift 4模式下使用Swift 3 @OBJC推断?
  • 我该如何处理@OBJC推理在Swift 4中使用#Selector((?

相关内容

最新更新