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