使用排序数组[Geofire Keys]作为参考,通过其属性对对象数组[Venue]进行排序?

时间:2018-04-06 02:47:48

标签: arrays swift sorting object geofire

我构建了以下“帮助器”函数,该函数作为参数:

  • ' unsortedArray ':Venue对象数组需要按其.venueID字符串属性排序
  • ' sortingGeoArray ':Geofire字符串键,用作上面排序未排序数组的参考。

并通过转义处理程序返回类型[ Venue ]的排序数组。

我试图在以下主题上建议实现这个简单明了的解决方案:

'Sorting a Swift array by ordering from another array'

    func sortVenuesArraybyGeofireKeys(unsortedArray: [Venue], sortingGeoArray: [String] , handler: @escaping (_ sortedArray: [Venue]) -> ()){

    let ordering = Dictionary(uniqueKeysWithValues: sortingGeoArray.enumerated().map { ($1, $0) })
    let sorted: [Venue] = unsortedArray.sorted{ ordering[$0.venueID]! < ordering[$1.venueID]! }

    handler(sorted)

}

我已经通过我的代码在多个地方尝试了上面的排序代码,我总是得到一个“意外发现nil,同时在下一行展开一个Optional值”(当我测试它时工作操场):

let sorted: [Venue] = unsortedArray.sorted{ ordering[$0.venueID]! < ordering[$1.venueID]!

在我下面的调试窗口中,我感觉到。'排序'中的.map函数无效,因此在下一行找到nil

任何帮助将不胜感激。

enter image description here

更新:感谢下面的支持,看来我的Geofire查询下面特别是'append'到venueGeoKeys [string]数组没有附加键值,因此为什么我找到了nil执行要排序的功能。

        let query = self.GEOFIRE_VENUES.query(at: location, withRadius: 1000)
    query.observe(.keyEntered) { (key: String!, location: CLLocation!) in

        self.venueGeoKeys.append(key)
    }

0 个答案:

没有答案