我有一个 Swift 库,它严重依赖obj.valueForKey()
于NSObject
.
迁移到 Swift 4 后,我发现这些调用总是崩溃并出现错误“此类与键的键值编码不兼容...”,除非我要查找的属性是用@objc
.
现在是否必须声明属性@objc
才能使用此方法找到它们?有替代方案吗?
当您执行迁移时,Xcode 询问了@objc
推理,您可能选择了新类型而不是 Swift3。
可能的解决方案:
@objc
根据需要在每个方法上使用@objc
,而不是在整个类上使用。
@objcMembers
你可以@objcMembers
在课堂上使用。
将@objcMembers 属性应用于类会隐式地将@objc 属性添加到其所有与Objective-C 兼容的成员中。
请记住:因为应用 @objc 属性会增加应用程序的编译大小并对性能产生不利影响,所以只有在每个成员都需要应用 @objc 属性时才在声明中应用 @objcMembers 属性。
您还可以在以下位置更改项目的行为:
Build Settings
> Swift 3 @objc Inference
> On
/Off
相关问题: