对包含NSDate对象的NSArray进行排序

时间:2015-12-28 04:19:23

标签: ios swift nsarray nsdate

我有一个包含NSDate个对象的数组。使用Objective-C,我可以使用:

对此数组进行排序
NSArray *array = [unsortedArray sortedArrayUsingSelector:@selector(compare:)]

我想知道是否有Swift等同于做同样的事情。这里对Swift相对较新,黑客入侵。

3 个答案:

答案 0 :(得分:2)

如果你使用Swift数组。

let datesArray = [ NSDate(), NSDate(timeIntervalSinceNow: 60), NSDate(timeIntervalSinceNow: -60) ]
let sorter: (NSDate, NSDate) -> Bool = { $0.compare($1) == .OrderedAscending }
let sortedDatesArray = datesArray.sort(sorter)

答案 1 :(得分:2)

您可以使NSDate符合协议Comparable,然后您可以像对数字数据类型一样进行比较:

extension NSDate: Comparable {}

public func <(lhs: NSDate, rhs: NSDate) -> Bool {
    return lhs.compare(rhs) == .OrderedAscending
}

var dates = [NSDate(),NSDate(timeIntervalSinceNow: -600)]   // ["Dec 28, 2015, 2:48 AM", "Dec 28, 2015, 2:38 AM"]
dates.sortInPlace(<)
dates // ["Dec 28, 2015, 2:38 AM", "Dec 28, 2015, 2:48 AM"]

答案 2 :(得分:1)

在Swift中使用本机Array类型。如果您要与ObjC的旧代码连接,请使用:

let array = unsortedArray.sortedArrayUsingSelector("compare:")