使用sort函数按NSDates对数组进行排序

时间:2015-04-27 17:57:54

标签: ios arrays swift sorting nsdate

我有一个名为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响应。然后我通过解析JSON数据创建Event个对象,并将它们放入一个类型化的数组(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! })

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

无法调用&#39;排序&#39;使用类型&#39;((_,_) - &gt; _)&#39;

的参数列表

我不明白为什么我不能这样排序,因为我有一个打字数组。

知道我在这里做错了吗?

1 个答案:

答案 0 :(得分:23)

您无法使用<运算符直接比较日期。从那里,你有几个选择。首先,您可以使用NSDate的compare功能。

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

另一种方法是获取可以直接比较的.timeIntervalSince1970日期NSTimeInterval属性:

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