对包含另一个可选项目的可选项目数组进行排序 [英] Sort an array of optional items that holds yet another optional

查看:20
本文介绍了对包含另一个可选项目的可选项目数组进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何对包含可选 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 的更新(假设 dateCompletedDate):

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆