Swift keyPath vs protocol



我理解keyPaths的基本思想,但我不了解它的用例。如果您已经知道实例的类型,则可以轻松访问其属性。如果没有,协议已支持只读读写属性。有人可以解释我错过了什么吗?除了键路径或键路径比协议更好时,我们不能用协议做什么?

如果您已经知道实例的类型,则可以轻松访问其属性。如果没有,协议已支持只读读写属性。有人可以解释我错过了什么吗?

你缺少的是一种未知的感觉。

在你的两个句子中,你都谈到知道实例的属性是什么。这不是关键路径解决的问题。密钥路径与了解类型无关;他们不反对类型或协议。相反,在使用密钥路径之前,您必须确切知道实例的属性是什么。

密钥路径适用于未知的是要访问的属性的情况。它们提供了一种传递属性引用的方法,以便可以告诉其他人访问属性。

例如,下面是"人员"类型:

struct Person {
let firstName : String
let lastName : String
}

这里有一个函数,它按firstNamelastName对 Person 数组进行排序,而不知道要按一个排序:

func sortArrayOfPersons(_ arr:[Person], by prop: KeyPath<Person, String>) -> [Person] {
return arr.sorted { $0[keyPath:prop] < $1[keyPath:prop] }
}

键路径是告诉此函数使用哪个属性作为排序基础的方式。

相关内容

  • 没有找到相关文章

最新更新