2015-04-27 42 views
3

我有一个名为Event的模型类。使用排序功能按NSDates对数组排序

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

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

不能调用“排序”类型的参数列表“((_,_) - > _)”

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

任何想法我在这里做错了吗?

回答

22

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

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

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

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

我也被在令人费解的错误混淆。原来它只是意味着封闭内的某种错误,谢谢! – BradzTech