如何对包含可选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都被视为“在遥远的过去”,以便在所有其他项目之前对其进行排序。
dateCompleted
nil
dateCompleted == nil
Swift 3的 更新(假设dateCompleted是Date):
Date
array.sort { (item1, item2) -> Bool in let t1 = item1?.dateCompleted ?? Date.distantPast let t2 = item2?.dateCompleted ?? Date.distantPast return t1 < t2 }