26

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

迁移到 Swift 4 后,我发现这些调用总是崩溃并出现错误“此类与键的键值编码不兼容...”,除非我要查找的属性是用@objc.

现在是否必须声明属性@objc才能使用此方法找到它们?有替代方案吗?

4

1 回答 1

68

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

相关问题:

于 2017-06-27T21:28:52.377 回答