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推理弃用?