2015-04-27 5 views
3

У меня есть класс модели Event.Сортировка массива NSDates с использованием функции сортировки

import Foundation 
import MapKit 

public class Event { 

    let id: Int 
    var title: String? 
    let status: String 
    let location: String 
    var description: String? 
    var latitude: CLLocationDegrees? 
    var longitude: CLLocationDegrees? 
    var startDate: NSDate? 
    var endDate: NSDate? 


    init(id: Int, location: String, status: String) { 
     self.id = id 
     self.location = location 
     self.status = status 
    } 

} 

Я получаю данные о событиях из веб-API как ответ JSON. Затем я создаю объекты Event из разбора данных JSON и помещаю их в типизированный массив (var events = [Event]()).

private func processEventData(data: JSON) { 
    var events = [Event]() 

    if let eventsArray = data.array { 
     for eventObj in eventsArray { 
      let event = Event(
       id: eventObj["id"].int!, 
       location: eventObj["location"].string!, 
       status: eventObj["status"].string! 
      ) 
      event.title = eventObj["title"].string 
      event.description = eventObj["description"].string 
      event.latitude = eventObj["lat"].double 
      event.longitude = eventObj["lng"].double 
      event.startDate = NSDate(string: eventObj["start"].string!) 
      event.endDate = NSDate(string: eventObj["end"].string!) 

      events.append(event) 
     } 

    } 
} 

Следующая Мне нужно отсортировать этот массив по значению startDate собственности. Я попытался сортировать массив, используя новую стандартную библиотечную функцию Swift sort вот так.

var orderedEvents = events.sort({ $0.startDate! < $1.startDate! }) 

Но странно я получаю следующее сообщение об ошибке.

не может ссылаться на «своего рода» со списком аргументов типа «((_, _) -> _)»

Я не понимаю, почему я не могу разобраться это так, потому что у меня есть напечатанное массив.

Любая идея, что я делаю неправильно здесь?

ответ

22

Вы непосредственно не можете сравнить даты с помощью оператора <. Оттуда у вас есть пара вариантов. Во-первых, вы можете использовать функцию NSDate compare.

events.sort({ $0.date.compare($1.date) == NSComparisonResult.OrderedAscending }) 

Другим способ получить .timeIntervalSince1970 собственности на дату, которая является NSTimeInterval, который можно непосредственно сравнивать:

events.sort({ $0.date.timeIntervalSince1970 < $1.date.timeIntervalSince1970 }) 
+0

Я тоже был смущен неясной ошибка. Оказывается, это просто означает какую-то ошибку внутри закрытия, спасибо! – BradzTech

Смежные вопросы