使用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的compare
function。
events.sort({ $0.date.compare($1.date) == NSComparisonResult.OrderedAscending })
另一种方法是获取date的.timeIntervalSince1970
属性,它可以直接比较NSTimeInterval
:
events.sort({ $0.date.timeIntervalSince1970 < $1.date.timeIntervalSince1970 })