我得到了以下代码:
class Person {
let age = 0
}
func createKeyPath() {
let ageKeyPath = \Person.age // Works
}
func createKeyPath(from: ???) { // What can I place here to make it compile?
let ageKeyPath = \from.age
}
我有通用类,我需要在通用具体类型(例如Person)上创建键路径,但是我不确定如何基于参数创建键路径。我尝试过:
func createKeyPath(from: Person.Type) {
let ageKeyPath = \from.age
}
但是它不能编译。
答案 0 :(得分:1)
这是一个操场示例(基本上,您将需要约束泛型,以便编译器可以确保您要查找的KeyPath实际上存在于该泛型类型上):
import UIKit
import PlaygroundSupport
protocol Ageable {
var age: Int {get}
}
class Person: Ageable {
let age = 0
}
func createKeyPath<SomeAgeable: Ageable>(from: SomeAgeable) -> KeyPath<SomeAgeable, Int> {
return \SomeAgeable.age
}
let p = Person()
let keyPath = createKeyPath(from: p)
print(p[keyPath: keyPath])
答案 1 :(得分:0)
我需要在通用的具体类型(例如Person)上创建键路径,但是我不确定如何基于参数创建键路径。
在处理键路径的方法(例如value(forKeyPath:)
)中,字符串用作键路径参数。