使用sorting函数对NSDatessorting数组

我有一个名为Event的模型类。

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

我从Web API获取事件数据作为JSON响应。 然后,我从parsingJSON数据创buildEvent对象,并将它们放入一个types数组( 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属性值对这个数组进行sorting。 我尝试使用这种新的Swift标准库函数sort数组。

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

但奇怪的是我得到以下错误。

无法使用types为“((_,_) – > _”)的参数列表调用“sort”

我不明白为什么我不能这样sorting,因为我有一个types数组。

任何想法我在这里做错了吗?

您不能使用<运算符直接比较date。 从那里,你有几个选项。 首先,您可以使用NSDate的comparefunction。

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

另一种方法是获取date的.timeIntervalSince1970属性,它可以直接比较NSTimeInterval

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