我正在构建一个iOS应用程序,该应用程序在TableViewController中显示远程iBeacons。

为了提高性能并测试新的Swift 5.1 diffing功能,我编写了以下代码:

private func updateBeacons(_ rangedBeacons: [CLBeacon]) {
    guard beacons != rangedBeacons else { return }

    let difference = rangedBeacons.difference(from: beacons)
    // Also tried:
    // let difference = rangedBeacons.difference(from: beacons, by: { $0.uuid == $1.uuid })

    // ...
}

到达此代码后,将抛出fatalError:



如何在CLBeacon上执行集合差异?

引用的代码可以在这里找到:
https://github.com/apple/swift/blob/master/stdlib/public/core/ArrayBuffer.swift#L226-L232

最佳答案

我也遇到了这个问题,但就我而言,我是从Core Data NSFetchedResultsController获取数组之一。我怀疑这与原始数组来自Objective-C的事实有关。

我可以通过将数组包装在新的Array中来解决此问题:

private func updateBeacons(_ rangedBeacons: [CLBeacon]) {
    guard beacons != rangedBeacons else { return }

    let difference = Array(rangedBeacons).difference(from: Array(beacons))

    // ...
}

10-05 20:05