Мне нужно получить zipCode
и city
в нескольких viewControllers.
Вот как я сейчас это делаю ...
import CoreLocation
let locationManager = CLLocationManager()
class MyViewController: UIViewController, CLLocationManagerDelegate{
override func viewDidLoad() {
super.viewDidLoad()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestWhenInUseAuthorization()
}
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
CLGeocoder().reverseGeocodeLocation(manager.location!, completionHandler: {(placemarks, error)-> Void in
if error != nil {
//AlertView to show the ERROR message
}
if placemarks!.count > 0 {
let placemark = placemarks![0]
self.locationManager.stopUpdatingLocation()
let zipCode = placemark.postalCode ?? ""
let city:String = placemark.locality ?? ""
// Do something with zipCode
// Do something with city
}else{
print("No placemarks found.")
}
})
}
func someFunction() {
locationManager.startUpdatingLocation()
}
Все работает отлично, но, как вы можете видеть, выполнение этого в нескольких viewController приводит к большому количеству повторений кода (конечно, я не показываю весь код).
Какой самый распространенный способ получить zipCode
и city
из CLLocationManager()
более практичным способом из нескольких viewControllers?
Я думаю, что-то вроде ...
MyLocationManager.zipCode() // returns zipCode as a string
MyLocationManager.city() // returns city as a string