首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Swift中按属性排序结构

如何在Swift中按属性排序结构
EN

Stack Overflow用户
提问于 2015-04-08 18:14:18
回答 2查看 199关注 0票数 1

我试图根据其属性对结构数组进行排序。

假设我想按照x坐标对NSViews数组进行排序。

我怎么才能做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-08 18:14:18

这是一个非常好的解决方案,它被称为闭包表达式语法.

你需要做的是:

代码语言:javascript
运行
复制
let sortedArray = sorted(allViewsArray, { (p1: NSView, p2: NSView) -> Bool in
            return p1.frame.origin.x < p2.frame.origin.x
        })

这将将alLViewsArray从最大的X坐标排序到最小的坐标,并将其存储在sortedArary中。

票数 2
EN

Stack Overflow用户

发布于 2015-04-08 18:22:43

注意,您可以稍微简化语法,这通常有助于提高可读性(重点是您正在做什么,而不是类型的语法等等):

代码语言:javascript
运行
复制
let sortedArray = sorted(allViewsArray) {
    $0.frame.origin.x < $1.frame.origin.x
}

尾随闭包可以位于函数调用parens之外,类似于其他块结构(如ifwhile);如果闭包表达式是单个语句,则可以跳过return,并且可以跳过函数签名,并对参数名使用$0$1等。

只有在没有更多有用的名称可用时,才能使用最后一个名称(例如,p1没有比$0更具有描述性)。如果您确实想给它们命名,仍然可以跳过以下类型:

代码语言:javascript
运行
复制
let sortedArray = sorted(allViewsArray) { p1, p2 in
    p1.frame.origin.x < p2.frame.origin.x
}

在应用这种语法糖时,Swift有时有点脆弱,所以偶尔您会发现它不能像它应该的那样被缩短,但是它通常是有效的。

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

https://stackoverflow.com/questions/29522288

复制
相关文章

相似问题

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