2015-08-25 17 views
16

Ho un oggetto personalizzato "Riunione" Sto aggiungendo tutti gli oggetti in una matrice. Quello che voglio fare è ordinare la matrice da Meeting.meetingDate.Ordina array di oggetti personalizzati per data swift

Sto anche utilizzando Parse, ho due query e metto i risultati in un array.

Sono in grado di aggiungere i dati a "meetingData", ma non ordinarlo.

Qualcuno può aiutare con questo?

Quindi il mio array è:

var meetingsData = [Meeting]() 

La classe Meeting è:

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? 

} 

I contenuti della matrice è in questo modo:

<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"; 
} 

ho cercato di fare questo Swift how to sort array of custom objects by property value ma non funziona

Grazie in anticipo

risposta

42

NSDate non può essere confrontato direttamente con <. È possibile utilizzare il metodo NSDate s' compare, come nel codice seguente:

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

Nel codice di cui sopra è possibile modificare l'ordine del genere utilizzando il NSComparisonResult enum, che a Swift viene implementato come la seguente:

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

Spero che questo ti aiuti.

+0

Grazie ... utilizzo 'sortInPlace' per la connettività – jose920405

15

Per Swift 3

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

O

Come sono date ora direttamente paragonabili Swift 3, per esempio.

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

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

Grazie, Ramkrishna. Sembra che la sintassi sia leggermente aggiornata dal tuo post ... meetingsData.sorted (da: {$ 0.meetingDate.compare ($ 1.meetingDate) == .orderedAscending}) – rockiesGrizzly