致命错误无效收集计数在连续遍历中有所不同

时间:2017-09-25 01:51:37

标签: ios swift collections iteration tuples

我有一个像这样声明的元组数组。

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上。

0 个答案:

没有答案