Question or problem with Swift language programming:
I have a custom object “Meeting” I am adding all the objects in an array. What I want to do is sort the array from Meeting.meetingDate.
I’m also using Parse, I have two queries and putting the results into one array.
I am able to add the data to “meetingData”, but not sort it.
Can anyone help with this?
So my array is:
var meetingsData = [Meeting]()
The Meeting class is:
public class Meeting: PFObject, PFSubclassing { @NSManaged public var meetingTitle: String? @NSManaged public var meetingLocation: String? @NSManaged public var meetingNotes: String? @NSManaged public var meetingDuration: String? @NSManaged public var createdBy: User? @NSManaged public var meetingTime: NSDate? @NSManaged public var meetingDate: NSDate? }
The contents of the array is like so:
{ createdBy = ""; meetingDate = "2015-08-29 17:07:12 +0000"; meetingDuration = "2 hours 2 mins"; meetingLocation = 4th Floor; meetingNotes = With Investors; meetingTime = "2015-08-24 09:00:17 +0000"; meetingTitle = Meeting with Investors; } { createdBy = ""; meetingDate = "2015-08-23 23:00:00 +0000"; meetingDuration = "1 hour"; meetingLocation = "Emirates Stadium, London"; meetingNotes = "Football"; meetingTime = "2000-01-01 20:00:00 +0000"; meetingTitle = "Liverpool V Arsenal"; } { createdBy = ""; meetingDate = "2015-09-23 23:00:00 +0000"; meetingDuration = "1 hour"; meetingLocation = "Library"; meetingNotes = "Dev Team"; meetingTime = "2000-01-01 10:00:00 +0000"; meetingTitle = "Code Review"; }
I have tried to do this Swift how to sort array of custom objects by property value but it doesn’t work
Thanks in advance
How to solve the problem:
Solution 1:
For Swift 4
Sorting by timestamp
values.sorted(by: { $0.meetingDateTimestamp > $1. meetingDateTimestamp })
Solution 2:
NSDate
can’t be compared with <
directly. You can use NSDate
‘s compare
method, like in the following code:
meetingsData.sort({ $0.meetingDate.compare($1.meetingDate) == .OrderedAscending })
In the above code you can change the order of the sort using the NSComparisonResult
enum, that in Swift is implemented like the following:
enum NSComparisonResult : Int { case OrderedAscending case OrderedSame case OrderedDescending }
I hope this help you.
Solution 3:
For Swift 3
meetingsData.sort(by: { $0.meetingDate.compare($1.meetingDate) == .orderedAscending})
OR
As dates are now directly comparable in Swift 3, For example.
let firstDate = Date() let secondDate = Date() if firstDate < secondDate { } else if firstDate == secondDate { } else if firstDate > secondDate { }