/ / Filtr Swift według właściwości obiektu NSDate - ios, swift, nsdate

Swift filtruj według właściwości obiektu NSDate - ios, swift, nsdate

Chciałbym filtrować moje niestandardowe obiekty za pomocą właściwości daty.

Na przykład:

class Event
{
let dateFrom: NSDate!
let dateTo: NSDate!

init(dateFrom: NSDate, dateTo: NSDate) {
self.dateFrom = dateFrom
self.dateTo = dateTo
}
}

Teraz mam listę może 500 zdarzeń, a chcę tylko pokazać wydarzenia na konkretną datę. Mógłbym przechodzić przez wszystkie Obiekty i tworzyć nowe Tablice Obiektów, ale czy mogę również użyć filtra?

Próbowałem czegoś takiego:

let specificEvents = eventList.filter( { return $0.dateFrom > date } )

Gdzie data to obiekt NSDate dla określonej daty, ale nie mogę użyć> operater.

Czy istnieje łatwy sposób na uzyskanie wszystkich wydarzeń na konkretną datę, gdzie data jest między datą i datą?

Odpowiedzi:

5 dla odpowiedzi № 1

Dzięki Martinowi za wskazanie mi właściwego kierunku.

Oto odpowiedź, jeśli ktoś inny zastanawia się, jak rozwiązać ten problem w Swift:

Dodaj rozszerzenie do NSDate:

public func <(a: NSDate, b: NSDate) -> Bool {
return a.compare(b) == NSComparisonResult.OrderedAscending
}

public func ==(a: NSDate, b: NSDate) -> Bool {
return a.compare(b) == NSComparisonResult.OrderedSame
}

extension NSDate: Comparable { }

Możesz więc użyć operatora <i> do porównania NSDate.

    var date = dateFormatter.dateFromString(dateString)
var dateTomorrow = date?.dateByAddingTimeInterval(NSTimeInterval(60*60*24)) // add one Day

eventsToday = allEvents.filter( { return $0.dateFrom >= date && $0.dateTo < dateTomorrow} )

0 dla odpowiedzi nr 2

Dla aktualizacji Swift 3.x: -

extension Date: Comparable{
public static func <(a: Date, b: Date) -> Bool{
return a.compare(b) == ComparisonResult.orderedAscending
}
static public func ==(a: Date, b: Date) -> Bool {
return a.compare(b) == ComparisonResult.orderedSame
}
}