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

Sort an array by NSDates using the sort function

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

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 响应。然后我通过解析 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({ [=12=].startDate! < .startDate! })

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

无法使用“((_, _) -> _)”类型的参数列表调用 'sort'

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

知道我做错了什么吗?

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

events.sort({ [=10=].date.compare(.date) == NSComparisonResult.OrderedAscending })

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

events.sort({ [=11=].date.timeIntervalSince1970 < .date.timeIntervalSince1970 })