一尘不染

排序包含其他可选项目的可选项目数组

swift

如何对包含可选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对数组排序?


阅读 162

收藏
2020-07-07

共1个答案

一尘不染

您的排序功能可以结合使用可选链接和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的 更新(假设dateCompletedDate):

array.sort { (item1, item2) -> Bool in
    let t1 = item1?.dateCompleted ?? Date.distantPast
    let t2 = item2?.dateCompleted ?? Date.distantPast
    return t1 < t2
}
2020-07-07