2014-10-04 39 views
3

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

回答

12

你的排序功能可以使用可选链的组合和零 合并运算符:

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有几分视为“在遥远的过去” ,以便它们在所有其他物品之前订购。


更新斯威夫特3(假设dateCompletedDate):

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

这将做到这一点。谢谢! – Konrad77 2014-10-04 09:54:15

相关问题