2016-09-20 13 views
11

Mam tablicę obiektów, które ma element, który jest typu Date, i próbuję posortować całą tablicę przez Date, i nie sortuje poprawnie. To jest kod, którego używam, nazwa tablicy to alarms, a nazwa typu członka Date to time.(Swift 3) Próbujesz posortować tablicę obiektów klasy według daty w swift 3?

alarms.sort(by: { $0.time.compare($1.time) == .orderedAscending }) 

i ilekroć rozwiązać to po prostu nie działa prawidłowo, a ja sprawdzając je drukując wszystkie wartości w for pętli.

Czy ktoś może mi pomóc ze składnią do tego?

+0

'Date' nie ma własności' time'. Skąd to pochodzi? –

+0

@TomHarrington - Myślę, że 'time' to nazwa właściwości' Date' tego typu alarmu. – Rob

+0

Tak, dziękuję! – Jolaroux

Odpowiedz

19

Funkcja compare to funkcja . Z Date możesz po prostu użyć operatora <. Na przykład:

alarms.sort { $0.time < $1.time } 

Mimo, że compare powinno działać też, choć. Podejrzewam, że jest tu jakiś głębszy problem, że być może twoje wartości time mają różne daty. Być może patrzysz tylko na porę czasu, ale porównując obiekty Date, uwzględnia ona zarówno datę, jak i czas. Jeśli chcesz tylko spojrzeć na część czasu, istnieje kilka sposobów, aby to uczynić na przykład spojrzeć na interwale czasowym między time a początkiem dnia:

let calendar = Calendar.current 

alarms.sort { 
    let elapsed0 = $0.time.timeIntervalSince(calendar.startOfDay(for: $0.time)) 
    let elapsed1 = $1.time.timeIntervalSince(calendar.startOfDay(for: $1.time)) 
    return elapsed0 < elapsed1 
} 

Istnieje wiele sposobów na to, ale mam nadzieję, że ilustruje to pomysł.

+0

Myślę, że mają różne daty! I dziękuję za tego robaka, spróbuję i dam ci znać, jak się okazuje. – Jolaroux

+0

Otrzymuję błędy z częścią Calendar.startOfDay, jest to błąd, który dostaję Użycie elementu instancji "startOfDay" na typie "Kalendarz"; czy zamiast tego użyłeś wartości typu "Kalendarz"? – Jolaroux

+0

Działa teraz idealnie! +1 dzięki :) – Jolaroux