/ / Jak wykryć nowy iBeacon? - ios, swift, ibeacon

Jak wykryć nowy iBeacon? - ios, swift, ibeacon

Znajduję pasmo i wyświetlam je w moim TableView. Muszę wykryć, kiedy moja aplikacja wykrywa nowy sygnał nawigacyjny. Próbuję to zrobić w ten sposób, ale coś idzie nie tak

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
}

Odpowiedzi:

0 dla odpowiedzi № 1

Iteracja przez dwie tablice nie będzie łatwa, ponieważ jeśli kiedykolwiek zobaczysz dwa sygnały nawigacyjne w tym samym czasie, błędnie pomyślisz, że są "nowe", ponieważ jeden nie jest taki sam jak drugi.

Zwykle używam zestawu, aby to zrobić:

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