Я запустил ваш код и только что добавил отсутствующий ключ Конфиденциальность - расположение при использовании Описание использования в info.plist
файле.
И я внес некоторые изменения в ваш код и получил значение nil
, потому что метод вызывается несколько раз, и когда пользователь дает разрешение, и метод вызывается снова, и я собираюсь напечатать сведения о местоположении, но факт все равно locationManager
переменная не имеет данных о местоположении пользователя.
получить сведения о местоположении в locationManager
, когда делегат didUpdateLocations
вызвал
Я внес в ваш код некоторые изменения:
import UIKit
import CoreLocation
class ViewController: UIViewController,CLLocationManagerDelegate {
var locationManager = CLLocationManager()
var currentlocation:CLLocation!
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// authorizelocationstates()
}
func authorizelocationstates(){
if CLLocationManager.authorizationStatus() == .authorizedWhenInUse {
currentlocation = locationManager.location
print(currentlocation)
}
else{
// Note : This function is overlap permission
// locationManager.requestWhenInUseAuthorization()
// authorizelocationstates()
}
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
locationManager = manager
// Only called when variable have location data
authorizelocationstates()
}
override func viewDidLoad() {
super.viewDidLoad()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
// Get Location Permission one time only
locationManager.requestWhenInUseAuthorization()
// Need to update location and get location data in locationManager object with delegate
locationManager.startUpdatingLocation()
locationManager.startMonitoringSignificantLocationChanges()
}
}
Надеюсь, это поможет вам.