2016-03-21 39 views
0

我試圖使用以下代碼採取陣列或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 
    } 

當我嘗試運行代碼,我得到一個錯誤在第三到最後一行groupedTrips.append(group)Thead 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)而在我的控制檯,我得到fatal error: array cannot be bridged from Objective-C。 My Trip類只是一個簡單的Swift類,它將JSON元素解析爲對象。

+0

我真的不知道這是否是解決問題的最佳方法,但通常我會將類更改爲結構。除非你擴展/實現某些東西,並且如果你不介意它是值類型而不是引用類型,它就可以工作。 我相信你通常也可以修復它擴展NSObject,但不是那麼確定。 –

+0

@TedHuinink:它看起來像改變到一個結構工作。如果我想使用最簡單的對象類型來包含值,可能是一個好主意。將您的評論轉換爲答案,我會將其標記爲正確。 –

回答

1

我真的不知道這是否是解決問題的最佳方法,但通常我會將類更改爲結構。除非你擴展/實現某些東西,並且如果你不介意它是值類型而不是引用類型,它就可以工作。

1

你應該看看Comparable。在Trip參考中實現這個功能可以讓你使用sort()函數。除此之外,我會推薦消化Swift's functional aspects。我認爲你的代碼可以被清理和顯着簡化。