在Swift 4的新的KeyPath中,有没有办法引用self
?
像这样可以正常工作,我们可以访问对象的属性:
func report(array: [Any], keyPath: AnyKeyPath) {
print(array.map({ $0[keyPath: keyPath] }))
}
struct Wrapper {
let name: String
}
let wrappers = [Wrapper(name: "one"), Wrapper(name: "two")]
report(array: wrappers, keyPath: \Wrapper.name)
但是,我觉得直接处理一个对象本身是不可能的:
let strings = ["string-one", "string-two"]
report(array: strings, keyPath: \String.self) // would not compile
我觉得应该有一种明显的方法可以做到这一点?
编辑:
或者简单地说:
let s = "text-value"
print(s[keyPath: \String.description]) // works fine
print(s[keyPath: \String.self]) // does not compile
self
的键路径,我们可以使用所提供对象的实例作为它们的标题。 - bteapot\String.self
),欢迎提交改进建议或在Swift论坛上提出。一段时间以前,我构建了一个强类型的Firebase数据库包装器,它可以使用键路径(因此您可以说诸如someProvider.observeValue(at: \.someProperty) { ... }
之类的内容),而自身键路径将非常有用(当时我只是通过添加一个计算属性来实现它,该属性仅返回self
)。 - Hamishextension String { var instance: String { return self } }
允许使用\String.instance
。请写下您的答案,我会接受它。 - bteapot