/ / Swift filtro per proprietà oggetto NSDate - ios, swift, nsdate

Filtro rapido dalla proprietà dell'oggetto NSDate - ios, swift, nsdate

Vorrei filtrare i miei oggetti personalizzati con una proprietà data.

Per esempio:

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

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

Ora ho una lista di forse 500 eventi, e voglio solo mostrare gli eventi per una data specifica. Potrei passare in rassegna tutti gli oggetti e creare una nuova matrice di oggetti, ma potrei usare anche un filtro?

Ho provato qualcosa del genere:

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

Dove data è un oggetto NSDate per una data specifica, ma non sono in grado di utilizzare l'operatore>.

C'è un modo semplice per ottenere tutti gli eventi per una data specifica, in cui la data è compresa tra la data e la data?

risposte:

5 per risposta № 1

Grazie a Martin per avermi indirizzato nella giusta direzione.

Ecco una risposta se qualcun altro sta cercando come risolvere questo in Swift:

Aggiungi un'estensione a 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 { }

Quindi è possibile utilizzare l'operatore <e> per il confronto 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 per risposta № 2

Per l'aggiornamento di 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
}
}