Swift 4“此类不符合键值编码”
我有一个Swift库,它非常依赖来自NSObject
obj.valueForKey()
。
迁移到Swift 4后,我发现这些调用总是崩溃,错误“这个类不是密钥值的密钥值…”除非我正在寻找的属性是用@objc
声明的。
现在是否必须使用@objc
声明属性,以便使用此方法找到它们? 还有其他选择吗?
当您执行迁移Xcode询问@objc
推断时,您可能选择了新类型而不是Swift3。
可能的解决方案:
使用@objc
根据需要在每个方法上使用@objc
而不是整个类。
使用@objcMembers
你可以在@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推理弃用?