按日期将值分组到数组中 - 无法从Obj-C桥接

时间:2016-03-21 14:50:51

标签: ios swift

我正在尝试使用以下代码获取数组或JSON数据并按日期对数组中的值进行分组:

func groupTrips (trips: JSON) -> [[Trip?]] {
    let calendar = NSCalendar.currentCalendar()
    var groupedTrips:[[Trip?]] = []
    var group: [Trip] = []
    for (index, tripRaw):(String, JSON) in trips {
      let trip = Trip(trip: tripRaw)
      if index == "0" && calendar.compareDate(trip.pickup, toDate: NSDate.init(), toUnitGranularity: .Day) != .OrderedSame {
        groupedTrips.append([nil])
      }
      if let lastTrip = group.last {
        let order = calendar.compareDate(trip.pickup, toDate: lastTrip.pickup, toUnitGranularity: .Day)
        if order == .OrderedSame {
          group.append(trip)
        } else {
          groupedTrips.append(group)
          group = [trip]
        }
      } else {
        group.append(trip)
      }
    }
    groupedTrips.append(group)
    return groupedTrips
  }

当我尝试运行代码时,我在第3行到最后一行groupedTrips.append(group)收到错误:Thead 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)在我的控制台中,我得到fatal error: array cannot be bridged from Objective-C。我的Trip类只是一个简单的Swift类,它将JSON元素解析为对象。

2 个答案:

答案 0 :(得分:1)

你应该看看Comparable。在Trip引用中实现它将允许您使用sort()函数。除此之外,我建议消化Swift's functional aspects。我认为您的代码可以被清理和简化。

答案 1 :(得分:1)

我真的不知道这是解决问题的最佳方法,但通常我会将类更改为结构。除非您扩展/实现某些内容,并且如果您不介意它是值类型而不是引用类型,否则可以正常工作。