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

标签 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! })

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

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

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

知道我在这里做错了什么吗?

最佳答案

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

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

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

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

关于ios - 使用 sort 函数按 NSDates 对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29902781/

相关文章:

ios - Swift - 将 Int 转换为枚举 :Int

.net - 为什么 .NET Array 类复制这么慢?

swift - Swift 将图像添加到 UICollection header

ios - Swift:如何使用 dispatch_once 使 UITableViewCell 出队?

ios - Controller 中的重复代码

ios - UIViewController 中的多个初始化步骤问题(不能使用多重继承)

ios - 如何将另一个 UIViewController 添加到现有的 UINavigationController

arrays - 当尝试在随机数字数组中查找运行最大值时,会调用多少次更新最大值?

PHP如何使用数组中的变量

ios - Swift with Core Data 在我获取的字符串上得到一个 "Optional("")"?