2015-08-25 4 views
16

Ich habe ein benutzerdefiniertes Objekt "Meeting" Ich füge alle Objekte in einem Array hinzu. Was ich tun möchte, ist das Array von Meeting.MeetingDate zu sortieren.Array von benutzerdefinierten Objekten nach Datum sortieren swift

Ich verwende auch Parse, ich habe zwei Abfragen und setzen die Ergebnisse in ein Array.

Ich kann die Daten zu "meetingData" hinzufügen, aber nicht sortieren.

Kann mir jemand dabei helfen?

Also meine Array ist:

var meetingsData = [Meeting]() 

Die Meeting-Klasse ist:

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? 

} 

Der Inhalt des Arrays ist in etwa so:

<Meeting: 0x125edd040, objectId: xIqx7MoRd6, localId: (null)> { 
createdBy = "<PFUser: 0x125d627c0, objectId: RKCWJRj84O>"; 
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; 
} 
<Meeting: 0x125ed95f0, objectId: tz4xx5p9jB, localId: (null)> { 
createdBy = "<PFUser: 0x125d627c0, objectId: RKCWJRj84O>"; 
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"; 
} 
<Meeting: 0x125ed95f0, objectId: tz4xx5p9jB, localId: (null)> { 
createdBy = "<PFUser: 0x125d627c0, objectId: RKCWJRj84O>"; 
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"; 
} 

Ich habe versucht, dies zu tun Swift how to sort array of custom objects by property value aber es funktioniert nicht

Vielen Dank im Voraus

Antwort

42

NSDate kann nicht direkt mit < verglichen werden.

meetingsData.sort({ $0.meetingDate.compare($1.meetingDate) == .OrderedAscending }) 

In dem obigen Code können Sie die Reihenfolge der Sortierung ändern Sie die NSComparisonResult Enum mit, dass in Swift wie folgt umgesetzt wird: Sie können NSDate ‚s compare Verfahren, wie in den folgenden Code verwenden

enum NSComparisonResult : Int { 
    case OrderedAscending 
    case OrderedSame 
    case OrderedDescending 
} 

Ich hoffe, das hilft Ihnen.

+0

Danke .. Ich benutze 'sortInPlace' für Mutablity – jose920405

15

Für Swift 3

meetingsData.sort(by: { $0.meetingDate.compare($1.meetingDate) == .orderedAscending}) 

ODER

Wie Daten in Swift 3, zum Beispiel jetzt direkt vergleichbar sind.

let firstDate = Date() 
    let secondDate = Date() 

    if firstDate < secondDate {  
    } else if firstDate == secondDate {   
    } else if firstDate > secondDate {   
    } 
+0

Danke, Ramkrishna. Sieht so aus, als ob die Syntax ein wenig seit dem Post aktualisiert wurde ... meetingsData.sorted (von: {$ 0.meetingDate.compare ($ 1.meetingDate) == .orderedAscending}) – rockiesGrizzly