Аз обхващаме маяците и ги показвам в My TableView. Трябва да установя кога приложението ми открива нов сигнал. Опитвам се да го направя по този начин, но нещо се обърка
var oldBeacons: [CLBeacon] = []
func locationManager(_ manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], in region: CLBeaconRegion) {
for beacon in beacons {
for oldBeacon in oldBeacons {
if beacon.minor != oldBeacon.minor, beacon.major != oldBeacon.major {
print("New Beacon")
} else {
print("Old Beacon")
}
}
}
oldBeacons = beacons
}
Отговори:
0 за отговор № 1Итертекцията през две масиви няма да работи лесно, защото ако видите някога два маяка по едно и също време, вие неправилно ще мислите, че те са "нови", защото едното не е същото като другото.
Обикновено използвам набор, за да направя това:
var detectedBeacons: Set<String>
func locationManager(_ manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], in region: CLBeaconRegion) {
for beacon in beacons {
let key = "(beacon.proximityUUID) (beacon.major) (beacon.minor)"
if detectedBeacons.contains(key) {
print("Old Beacon")
}
else {
print("New Beacon")
detectedBeacons.insert(key)
}
}
}