对包含另一个可选项目的可选项目数组进行排序 [英] Sort an array of optional items that holds yet another optional
本文介绍了对包含另一个可选项目的可选项目数组进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何对包含可选 NSdate 的可选数组进行排序?
How can I sort an array of optionals that holds an optional 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 对数组进行排序?
How can I sort array based on dateCompleted?
推荐答案
您的排序函数可以使用可选链和 nil 的组合合并运算符:
Your sort function could use a combination of optional chaining and the nil coalescing operator:
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
的项目被视为在遥远的过去"以便在所有其他项目之前订购它们.
This would sort the items on the dateCompleted
value, and all items that
are nil
and items with dateCompleted == nil
are treated as "in the distant past"
so that they are ordered before all other items.
Swift 3 的更新(假设 dateCompleted
是 Date
):
Update for Swift 3 (assuming that dateCompleted
is a Date
):
array.sort { (item1, item2) -> Bool in
let t1 = item1?.dateCompleted ?? Date.distantPast
let t2 = item2?.dateCompleted ?? Date.distantPast
return t1 < t2
}
这篇关于对包含另一个可选项目的可选项目数组进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文