使用 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 })
我有一个名为 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 })