Swift keyPath 与协议
Swift keyPath vs protocol
我了解 keyPaths 的基本概念,但不了解其用例。如果您已经知道实例的类型,则可以轻松访问它们的属性。如果你不这样做,协议已经支持只读、读写属性。有人可以向我解释我所缺少的吗?除了 keyPaths 或当 keypaths 比协议更好时,我们不能用协议做什么?
If you already know the type of the instance, you can access their properties easily. If you don’t, protocol already supports read-only, read-write properties. Can someone explain me what I am missing?
你缺少的是一种未知的感觉。
在你的两个句子中,你都说知道实例的属性是什么。这不是关键路径要解决的问题。关键路径与了解类型无关;他们并不反对类型或协议。相反,在使用关键路径之前,您必须确切知道实例的属性是什么。
关键路径用于未知属性访问的情况。它们提供了一种传递 属性 reference 的方法,这样就可以告诉其他人访问 that 属性.
例如,这里有一个 Person 类型:
struct Person {
let firstName : String
let lastName : String
}
这是一个函数,它按 firstName
或 lastName
对 Persons 数组进行排序], 不知道 哪个 排序依据:
func sortArrayOfPersons(_ arr:[Person], by prop: KeyPath<Person, String>) -> [Person] {
return arr.sorted { [=11=][keyPath:prop] < [keyPath:prop] }
}
关键路径是如何告诉此函数 什么 属性 用作排序的基础。
我了解 keyPaths 的基本概念,但不了解其用例。如果您已经知道实例的类型,则可以轻松访问它们的属性。如果你不这样做,协议已经支持只读、读写属性。有人可以向我解释我所缺少的吗?除了 keyPaths 或当 keypaths 比协议更好时,我们不能用协议做什么?
If you already know the type of the instance, you can access their properties easily. If you don’t, protocol already supports read-only, read-write properties. Can someone explain me what I am missing?
你缺少的是一种未知的感觉。
在你的两个句子中,你都说知道实例的属性是什么。这不是关键路径要解决的问题。关键路径与了解类型无关;他们并不反对类型或协议。相反,在使用关键路径之前,您必须确切知道实例的属性是什么。
关键路径用于未知属性访问的情况。它们提供了一种传递 属性 reference 的方法,这样就可以告诉其他人访问 that 属性.
例如,这里有一个 Person 类型:
struct Person {
let firstName : String
let lastName : String
}
这是一个函数,它按 firstName
或 lastName
对 Persons 数组进行排序], 不知道 哪个 排序依据:
func sortArrayOfPersons(_ arr:[Person], by prop: KeyPath<Person, String>) -> [Person] {
return arr.sorted { [=11=][keyPath:prop] < [keyPath:prop] }
}
关键路径是如何告诉此函数 什么 属性 用作排序的基础。