4

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.

0

3 Answers 3

2

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)
Sign up to request clarification or add additional context in comments.

Comments

2

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"]

1 Comment

Nice job on showing the extension, this is an elegant solution
1

Using the native Array type in Swift. If you are interfacing with legacy code from ObjC, use this:

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

1 Comment

thanks! i overlooked putting in the colon after the selector name.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.