Swift 4静态获取模型属性名称的值
使用Swift 3时,我是这样定义我的模型的Swift 4静态获取模型属性名称的值,swift,swift4,Swift,Swift4,使用Swift 3时,我是这样定义我的模型的 class Model: NSObject { var prop1: String } 当我想访问属性名prop1的静态字符串值时,我会使用let sad=#keyPath(Model.prop1)并打印出“prop1”。快乐的日子 问题是,自从升级到Swift 4后,我在执行上述操作时遇到了困难。我在其他帖子中看到,我们可以使用新的\Model.prop1语法,但它似乎提供了属性值,而不是名称的字符串表示 我也在重构我的Swift模型对
class Model: NSObject {
var prop1: String
}
当我想访问属性名prop1的静态字符串值时,我会使用let sad=#keyPath(Model.prop1)
并打印出“prop1”。快乐的日子
问题是,自从升级到Swift 4后,我在执行上述操作时遇到了困难。我在其他帖子中看到,我们可以使用新的\Model.prop1
语法,但它似乎提供了属性值,而不是名称的字符串表示
我也在重构我的Swift模型对NSObject的需求,但我认为我仍然可以获得这个功能
任何帮助都将不胜感激 Swift属性在运行时不一定保留属性名称的字符串。因此,如果Swift键路径语法能够为您提供此字符串值,那么它只能用于
NSObject
派生的类。然而,Swift密钥路径语法不仅适用于这些密钥路径;它还可用于引用非@objc类和结构的属性。因此,这是不可能的。但是,#keyPath
语法仍然可用,以获取Objective-C属性的字符串键路径。这里的意思是“它不能用于引用…”吗?好吧,这是我的一厢情愿。谢谢你的解释,查尔斯!我还看到一条警告消息:“#keyPath”的参数指的是依赖于Swift 4中弃用的“@objc”推断的“Model”中的属性“method”,这就是你说语法仍然可用时的意思吗?@RobNapier Nope!您完全可以使用Swift 4键路径引用任何对象、类或结构的任何属性。@HarryBloom在Swift 3中,与Objective-C兼容的NSObject
上的任何方法或属性都将自动推断为@objc
。在Swift 4中不再如此,只有在方法上加上@objc
关键字,方法才会暴露于Objective-C。因此,如果您使用需要Objective-C支持的功能,例如#selector
或#keyPath
,则您传递的方法需要在其声明中包含@objc
。