Я использую CLLocationManager
, просматривая свойство location
и исследуя level
из floor
, если есть. Документация предполагает, что если он не может определить floor
, он просто вернет nil
. На практике я получаю экземпляр CLFloor
, но его level
равен 2146959360. Преобразование его в шестнадцатеричное значение 0x7FF80000, которое выглядит подозрительно как некоторое значение crypti c часового.
lazy var locationManager: CLLocationManager = {
let locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
return locationManager
}()
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
switch CLLocationManager.authorizationStatus() {
case .notDetermined: locationManager.requestWhenInUseAuthorization()
case .denied: redirectToSettings()
default: break
}
}
@IBAction func didTapGetLocation(_ sender: Any) {
updateLabels(for: locationManager.location)
}
func updateLabels(for location: CLLocation?) {
guard let location = location else {
floorLabel.text = "No location."
return
}
if let floor = location.floor {
let hexString = "0x" + String(format: "%08x", floor.level)
floorLabel.text = "\(floor.level) (\(hexString))"
} else {
floorLabel.text = "No floor."
}
}
Я наблюдаю такое поведение только на физических iOS 13.3.1 устройствах. FWIW, более старые версии iOS (у меня здесь есть только устройство iOS 10), как и ожидалось, возвращают nil
, как и симулятор.
Что происходит?