如何对包含可选 NSdate 的可选数组进行排序?
class HistoryItem {
var dateCompleted: NSDate?
}
let firstListObject = someListOfObject.last
let secondListObject = someOtherListOfObject.last
let thirdListObject = evenSomeOtherListOfObject.last //Last returns 'T?'
var array = [firstListObject , secondListObject, thirdListObject]
如何根据 dateCompleted 对数组进行排序?
最佳答案
您的排序函数可以使用可选链接和 nil 的组合 合并运算符:
sort(&array) {
(item1, item2) -> Bool in
let t1 = item1?.dateCompleted ?? NSDate.distantPast() as! NSDate
let t2 = item2?.dateCompleted ?? NSDate.distantPast() as! NSDate
return t1.compare(t2) == NSComparisonResult.OrderedAscending
}
这将按 dateCompleted
值对项目进行排序,以及所有符合该日期的项目
是 nil
且 dateCompleted == nil
的项目被视为“遥远的过去”
这样它们就会排在所有其他项目之前。
针对 Swift 3 的更新(假设 dateCompleted
是 Date
):
array.sort { (item1, item2) -> Bool in
let t1 = item1?.dateCompleted ?? Date.distantPast
let t2 = item2?.dateCompleted ?? Date.distantPast
return t1 < t2
}
关于arrays - 对包含另一个可选项目的可选项目数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43508124/