我想在数组上使用sorted
方法。
public func sorted(by areInIncreasingOrder: (Self.Iterator.Element, Self.Iterator.Element) -> Bool) -> [Self.Iterator.Element]
我可以看到它需要一个函数(它需要2个元素并返回一个Bool),然后返回一个元素数组(已排序)
我遇到困难的方法是尝试传递一个匿名函数(闭包),使用$0
和$1
作为参数
我想为特定的key
(“模块”)
然后我想访问$0
和$1
但是,表面上,这意味着我必须转换这些参数,以便我可以访问这些参数的属性
更糟糕的是,因为参数可能是String
或Node
,我目前有重复的代码(switch
语句)
所以,无论如何,你们中的任何一位Swift老兵都会看到我能做些什么才能让它变得更好?
return self.sorted(by: {
for descriptor in sortDescriptors {
if descriptor.key == "module" {
if let firstNode = $0 as? Node {
if let secondNode = $1 as? Node {
let firstModule = firstNode.module?.name ?? ""
let secondModule = secondNode.module?.name ?? ""
let newDescriptor = NSSortDescriptor(key: nil, ascending: descriptor.ascending, selector: descriptor.selector)
switch newDescriptor.compare(firstModule, to: secondModule) {
case .orderedAscending:
return true
case .orderedDescending:
return false
case .orderedSame:
continue
}
}
}
}
switch descriptor.compare($0, to: $1) {
case .orderedAscending:
return true
case .orderedDescending:
return false
case .orderedSame:
continue
}
}
return false
})
}