I have an array containing NSDate
objects. With Objective-C, I am able to sort this array by using:
NSArray *array = [unsortedArray sortedArrayUsingSelector:@selector(compare:)]
I'm wondering if there's a Swift equivalent of doing this same thing. Relatively new to Swift here, hacking my way through.
Using the native Array
type in Swift. If you are interfacing with legacy code from ObjC, use this:
let array = unsortedArray.sortedArrayUsingSelector("compare:")
If you use Swift array.
let datesArray = [ NSDate(), NSDate(timeIntervalSinceNow: 60), NSDate(timeIntervalSinceNow: -60) ]
let sorter: (NSDate, NSDate) -> Bool = { $0.compare($1) == .OrderedAscending }
let sortedDatesArray = datesArray.sort(sorter)
You can make your NSDate
conform to protocol Comparable
and then you can just compare it the same way you do with number data type:
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"]
来源:https://stackoverflow.com/questions/34487625/sorting-nsarray-containing-nsdate-objects