对于我目前正在处理的项目,从我的方法接收的KeyPath实例获取KVC-String非常有用。简短的例子:
struct Person {
var name: String
}
let propertyCache = ["name": "something"]
func method<T>(_ keypath: KeyPath<Person, T>) -> T? {
let kvcName = keypath.kvc
return propertyCache[kvcName]
}
这可能看起来不是很有用,但在我的项目中它是:)我在KeyPath上找到了一个名为_kvcKeyPathString
的属性,它也是公共的,但每次我尝试都会返回nil
。
或者他们可能在那里使用反射?提前感谢您的想法/解决方案!
答案 0 :(得分:9)
我不知道有一种纯粹的Swift方法可以将属性的名称作为字符串获取。
但是,如果您将@objc
属性添加到属性,那么_kvcKeyPathString
实际上将具有值而不是始终为nil。此外,由于Swift结构不能用Objective-C表示,因此该方法仅适用于类。
最小的工作示例用法:
class SomeClass {
@objc var someProperty = 5
}
let keyPath = \SomeClass.someProperty
print(keyPath._kvcKeyPathString)