实现内部类型不同的 Swift 5.1 集合

Emi*_*pis 7 ios swift

我正在构建一个在 TableViewController 中显示远程 iBeacon 的 iOS 应用程序。

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

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 })

    // ...
}
Run Code Online (Sandbox Code Playgroud)

当到达此代码时,将fatalError抛出:

致命错误:不受支持:文件 /BuildRoot/Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-1100.2.259.70/swift/stdlib/public/core/ArrayBuffer.swift,第 231 行

如何对CLBeacons执行收集差异?

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

Mat*_*ity 7

我也遇到了这个问题,但在我的情况下,我从核心数据 NSFetchedResultsController 获取数组之一。我怀疑这与原始数组来自 Objective-C 的事实有关。

我能够通过将数组包装在一个新数组中来解决这个问题:

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

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

    // ...
}
Run Code Online (Sandbox Code Playgroud)