我试图根据其属性对结构数组进行排序。
假设我想按照x坐标对NSViews数组进行排序。
我怎么才能做到这一点?
发布于 2015-04-08 18:14:18
这是一个非常好的解决方案,它被称为闭包表达式语法.
你需要做的是:
let sortedArray = sorted(allViewsArray, { (p1: NSView, p2: NSView) -> Bool in
return p1.frame.origin.x < p2.frame.origin.x
})这将将alLViewsArray从最大的X坐标排序到最小的坐标,并将其存储在sortedArary中。
发布于 2015-04-08 18:22:43
注意,您可以稍微简化语法,这通常有助于提高可读性(重点是您正在做什么,而不是类型的语法等等):
let sortedArray = sorted(allViewsArray) {
$0.frame.origin.x < $1.frame.origin.x
}尾随闭包可以位于函数调用parens之外,类似于其他块结构(如if或while);如果闭包表达式是单个语句,则可以跳过return,并且可以跳过函数签名,并对参数名使用$0、$1等。
只有在没有更多有用的名称可用时,才能使用最后一个名称(例如,p1没有比$0更具有描述性)。如果您确实想给它们命名,仍然可以跳过以下类型:
let sortedArray = sorted(allViewsArray) { p1, p2 in
p1.frame.origin.x < p2.frame.origin.x
}在应用这种语法糖时,Swift有时有点脆弱,所以偶尔您会发现它不能像它应该的那样被缩短,但是它通常是有效的。
https://stackoverflow.com/questions/29522288
复制相似问题