/ / ¿Cómo detectar un nuevo iBeacon? - ios, swift, ibeacon

¿Cómo detectar un nuevo iBeacon? - ios, veloz, ibeacon

Escucho las balizas y las muestro en mi TableView. Necesito detectar cuándo mi aplicación detecta una nueva baliza. Trato de hacerlo de esta manera, pero algo sale mal.

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
}

Respuestas

0 para la respuesta № 1

Iterar a través de dos matrices no funcionará fácilmente porque si alguna vez ves dos balizas al mismo tiempo, pensarás incorrectamente que son "nuevas" porque una no es la misma que la otra.

Normalmente uso un Set para hacer esto:

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