Bonjour a tous,

Je suis débutant en SWIFT et je développe actuellement une application capable de détecter les iBeacons aux alentours et de comparer leur UUID avec les infos d'une base de données.

Pour la détection, j'utilise la classe CLLocationManager et une fonction locationManager et la je bloque vraiment sur un détail.
Admettons que je déclare une variable globale "detectedBeacon".
Dans la fonction locationManager, j'attibue ensuite à cette variable la valeur du beacon détecté.

Comment se fait-il que lorsque je fais un print de detectedBeacon à l'interieur de ma fonction j'obtienne bien les infos : [CLBeacon (uuid:EBEFD083-70A2-47C8-9837-E7B5634DF567, major:1, minor:2, proximity:3 +/- 14.68m, rssi:-74)] alors que quand je fais ce meme print dans le viewDidLoad la variable est vide je comprends pas ?


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 
import UIKit
import CoreLocation
class ViewController: UIViewController, CLLocationManagerDelegate{
 
    let locationManager = CLLocationManager()
    let region = CLBeaconRegion(proximityUUID: UUID(uuidString: "EBEFD083-70A2-47C8-9837-E7B5634DF567")!, identifier: "Discloth")
    var detectedBeacon : CLBeacon?
 //   let colors = []
 
 
 
    override func viewDidLoad() {
        super.viewDidLoad()
        locationManager.delegate = self
        locationManager.requestWhenInUseAuthorization()
        locationManager.startRangingBeacons(in: region)
 
 
        // Do any additional setup after loading the view, typically from a nib.
    }
 
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
 
    func locationManager(_ manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], in region: CLBeaconRegion) {
         print(beacons)
        let disclothBeacons = beacons.filter{ $0.proximity != CLProximity.unknown }
 
        if (disclothBeacons.count > 0) {
             detectedBeacon = disclothBeacons[0] as CLBeacon
    //        self.view.backgroundColor = self.colors[detectedBeacon.minor.intValue]
        }
    }
 
 
}