我有一个像这样声明的元组数组。
fileprivate var locations: [(location: CLLocation, time: Date)] = []
我每2秒捕获一次位置更新,并将它们添加到此阵列。
func didReceiveLocation(_ location: CLLocation) {
let location = (location, Date())
locations.append(location)
}
同时,我以1秒的间隔运行一个计时器,用这些收集的位置数据更新地图。它基本上是绘制路径。
fileprivate func updateDashboard() {
let locations = self.locations.map { $0.location } // crash
let path = GMSMutablePath()
for location in locations {
path.add(location.coordinate)
}
let bounds = GMSCoordinateBounds(path: path)
DispatchQueue.main.async {
// Draw the path on the map
let polyline = GMSPolyline(path: path)
polyline.strokeColor = .flatSkyBlue()
polyline.strokeWidth = 5
polyline.map = self.mapView
// Focus the map view to include the drawn path
self.mapView.animate(with: GMSCameraUpdate.fit(bounds, withPadding: 50))
}
}
这样可行,但有时我会在上面的方法(let locations = self.locations.map { $0.location }
)的第一行发生随机崩溃,并显示以下错误消息。
致命错误:无效收集:连续遍历中的计数不同
我假设这是因为map
函数在上一次迭代完成之前再次执行?如果是这样的话,该如何避免呢?
我可以找到关于此错误的唯一条目是此Swift bug report。它说它已经修好了,但我还是得到了它。顺便说一句,我在Xcode 8.3.2上。