Kon*_*d77 4 arrays sorting 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]
Run Code Online (Sandbox Code Playgroud)
如何根据dateCompleted对数组进行排序?
Mar*_*n R 17
您的排序函数可以使用可选链接和零合并运算符的组合:
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
}
Run Code Online (Sandbox Code Playgroud)
这将对dateCompleted
值上的项目进行排序,并将所有项目nil
和项目dateCompleted == nil
视为"在遥远的过去",以便在所有其他项目之前对它们进行排序.
更新Swift 3(假设dateCompleted
是a Date
):
array.sort { (item1, item2) -> Bool in
let t1 = item1?.dateCompleted ?? Date.distantPast
let t2 = item2?.dateCompleted ?? Date.distantPast
return t1 < t2
}
Run Code Online (Sandbox Code Playgroud)