【发布时间】:2017-09-10 17:02:05
【问题描述】:
对于我目前正在进行的项目,从我的方法正在接收的 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。
或者他们是否有可能在那里使用反射?提前感谢您的想法/解决方案!
【问题讨论】:
-
_kvcKeyPathString将有一个值,如果你用@objc标记属性,因为它的存在是为了支持互操作性。 -
有道理,谢谢!但这不是我的选择:/似乎我不是唯一一个有用例的人:bugs.swift.org/browse/SR-5821
-
关于 KeyPath 功能的 Swift 提案提到了将来通过字符串在运行时构建 KeyPath 的能力,所以也许到时候我们就能得到字符串值,或者当他们决定给我们一些可观的反射能力。
-
我希望我们能获得更多的反射特性,而不仅仅是在 keypaths 方面。再次感谢您的回答,即使它不能解决我的问题,@objc 属性也是正确的。您能否创建一个我可以接受的官方答案?以后再找其他人会更好。
-
我担心你是对的。很遗憾,因为确实有合法的时间你得到的是一个字符串并且你想将它映射到一个属性。我想放弃 Cocoa KVC,但它做到了,而 Swift KeyPath 没有。
标签: swift