Swift 4"这个类不符合键值编码"

use*_*360 25 xcode ios swift swift4

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

迁移到Swift 4后,我发现这些调用总是崩溃,错误"这个类不是密钥值的密钥值...",除非我正在寻找的属性被声明@objc.

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

nat*_*han 61

当您执行迁移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

相关问题: