我构建了以下“帮助器”函数,该函数作为参数:
并通过转义处理程序返回类型[ 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
任何帮助将不胜感激。
更新:感谢下面的支持,看来我的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)
}