首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift keyPath与协议

Swift keyPath与协议
EN

Stack Overflow用户
提问于 2019-04-29 13:47:24
回答 1查看 265关注 0票数 3

我理解keyPaths的基本思想,但不理解它的用例。如果您已经知道实例的类型,则可以轻松地访问它们的属性。如果不支持,协议已经支持只读、读写属性.有人能解释我错过了什么吗?除了keyPaths之外,我们不能用协议做的任何事情,或者当键盘比协议好的时候?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-29 15:10:32

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

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

在这两句话中,你都提到知道实例的属性是什么。这不是关键路径解决的问题。关键路径与知道类型无关;它们与类型或协议没有任何形式的对立。相反,在使用关键路径之前,必须准确地知道实例的属性是什么。

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

例如,这里有一个Person类型:

代码语言:javascript
复制
struct Person {
    let firstName : String
    let lastName : String
}

下面是一个函数,它通过firstNamelastName对Person数组进行排序,而不知道按哪个数组排序:

代码语言:javascript
复制
func sortArrayOfPersons(_ arr:[Person], by prop: KeyPath<Person, String>) -> [Person] {
    return arr.sorted { $0[keyPath:prop] < $1[keyPath:prop] }
}

一个关键的路径是如何告诉这个函数使用什么属性作为排序的基础。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55904763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档