Реализация различий в коллекции Swift 5.1 во внутреннем типе - PullRequest
2 голосов
/ 14 октября 2019

Я создаю приложение для iOS, которое отображает iBeacons на расстоянии в TableViewController.

Чтобы улучшить производительность и протестировать новую функцию различий 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 })

    // ...
}

При достижении этого кода выдается fatalError:

Неустранимая ошибка: не поддерживается: file /BuildRoot/Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-1100.2.259.70/swift / stdlib / public / core / ArrayBuffer.swift, строка 231

Как выполнить разбор коллекций на CLBeacon s?

Ссылочный код можно найти здесь: https://github.com/apple/swift/blob/master/stdlib/public/core/ArrayBuffer.swift#L226-L232

1 Ответ

0 голосов
/ 30 октября 2019

Я тоже затронул эту проблему, но в моем случае я получал один из массивов из Core Data NSFetchedResultsController. Я подозреваю, что это связано с тем, что исходный массив взят из Objective-C.

Я смог исправить это, поместив массивы в новый массив:

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

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

    // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...