Swift 4“这个类不是关键值编码兼容”

我有一个严重依赖于NSObject obj.valueForKey()的Swift库。

迁移到Swift 4后,我发现这些调用总是崩溃的错误“这个类不是关键值编码兼容的关键…”,除非我正在寻找的属性是用@objc声明的。

现在是强制使用@objc声明属性,以便用这个方法find它们? 有其他select吗?

当你执行迁移时,Xcode询问了@objc推理,你可能select了新的types而不是Swift3。

可能的解决scheme:

使用@objc

在每个方法上使用@objc ,而不是整个类。

使用@objcMembers

你可以在类上使用@objcMembers

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

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

请记住: 因为应用@objc属性可以增加应用程序的编译大小并对性能产生不利影响, 所以当每个成员需要应用@objc属性时仅对声明应用@objcMembers属性

推断旧的行为

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

相关问题:

  • 在Swift 4模式下使用Swift 3 @objc推断是否被弃用?
  • 我该如何处理Swift 4中#selector()的@objc推理弃用?