我理解keyPaths的基本思想,但不理解它的用例。如果您已经知道实例的类型,则可以轻松地访问它们的属性。如果不支持,协议已经支持只读、读写属性.有人能解释我错过了什么吗?除了keyPaths之外,我们不能用协议做的任何事情,或者当键盘比协议好的时候?
发布于 2019-04-29 15:10:32
如果您已经知道实例的类型,则可以轻松地访问它们的属性。如果不支持,协议已经支持只读、读写属性.有人能解释我错过了什么吗?
你所缺少的是一种未知的感觉。
在这两句话中,你都提到知道实例的属性是什么。这不是关键路径解决的问题。关键路径与知道类型无关;它们与类型或协议没有任何形式的对立。相反,在使用关键路径之前,必须准确地知道实例的属性是什么。
密钥路径用于未知的是要访问的属性。它们提供了一种传递属性引用的方法,以便可以告诉其他人访问该属性。
例如,这里有一个Person类型:
struct Person {
let firstName : String
let lastName : String
}下面是一个函数,它通过firstName或lastName对Person数组进行排序,而不知道按哪个数组排序:
func sortArrayOfPersons(_ arr:[Person], by prop: KeyPath<Person, String>) -> [Person] {
return arr.sorted { $0[keyPath:prop] < $1[keyPath:prop] }
}一个关键的路径是如何告诉这个函数使用什么属性作为排序的基础。
https://stackoverflow.com/questions/55904763
复制相似问题