Если вы уже знаете тип экземпляра, вы можете легко получить доступ к его свойствам.Если вы этого не сделаете, протокол уже поддерживает свойства только для чтения и чтения-записи.Может кто-нибудь объяснить мне, что мне не хватает?
То, что вы упускаете, - это ощущение того, что неизвестно.
В обоих ваших предложениях вы говорите о знании свойств экземпляра.Это не проблема ключевых путей решить.Ключевые пути не имеют ничего общего со знанием типа;они не находятся ни в какой оппозиции типам или протоколам.Напротив, прежде чем вы сможете использовать путь ключа, вы должны точно знать , каковы свойства экземпляра.
Пути ключа для случая, когда неизвестно, является , который собственность для доступа.Они предоставляют способ передать свойство ссылка , чтобы кто-то еще мог получить доступ к этому свойству.
Например, вот тип Person:
struct Person {
let firstName : String
let lastName : String
}
А вот функция, которая сортирует массив Persons по или firstName
или lastName
, не зная , что один для сортировки:
func sortArrayOfPersons(_ arr:[Person], by prop: KeyPath<Person, String>) -> [Person] {
return arr.sorted { $0[keyPath:prop] < $1[keyPath:prop] }
}
Ключевой путь - это то, как вы указываете этой функции , какое свойство использовать в качестве основы для сортировки.