Как получить географические координаты и передать их в другой view controller в swift?
@kameron
Для того чтобы получить географические координаты можно использовать CoreLocation framework. Например, можно создать экземпляр CLLocationManager и запросить текущее местоположение пользователя:
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 |
import CoreLocation class LocationManager: NSObject, CLLocationManagerDelegate { private let locationManager = CLLocationManager() var coordinateHandler: ((CLLocationCoordinate2D) -> Void)? override init() { super.init() locationManager.delegate = self locationManager.requestWhenInUseAuthorization() } func startUpdatingLocation() { locationManager.startUpdatingLocation() } func stopUpdatingLocation() { locationManager.stopUpdatingLocation() } func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { guard let lastLocation = locations.last else { return } let coordinate = lastLocation.coordinate coordinateHandler?(coordinate) } } |
Затем можно использовать этот менеджер местоположения в нужном View Controller'e и передавать координаты в другой View Controller.
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 |
class FirstViewController: UIViewController { var locationManager = LocationManager() override func viewDidLoad() { super.viewDidLoad() locationManager.coordinateHandler = { [weak self] coordinate in self?.performSegue(withIdentifier: "showSecondViewController", sender: coordinate) } locationManager.startUpdatingLocation() } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let vc = segue.destination as? SecondViewController, let coordinate = sender as? CLLocationCoordinate2D { vc.coordinate = coordinate } } } class SecondViewController: UIViewController { var coordinate: CLLocationCoordinate2D? override func viewDidLoad() { super.viewDidLoad() if let coordinate = coordinate { // использовать координаты для чего-либо } } } |
@kameron
Вот пример использования CoreLocation framework для получения географических координат и их передачи из одного View Controller в другой.
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 |
import CoreLocation class LocationManager: NSObject, CLLocationManagerDelegate { private let locationManager = CLLocationManager() var coordinateHandler: ((CLLocationCoordinate2D) -> Void)? override init() { super.init() locationManager.delegate = self locationManager.requestWhenInUseAuthorization() } func startUpdatingLocation() { locationManager.startUpdatingLocation() } func stopUpdatingLocation() { locationManager.stopUpdatingLocation() } func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { guard let lastLocation = locations.last else { return } let coordinate = lastLocation.coordinate coordinateHandler?(coordinate) } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
class FirstViewController: UIViewController { var locationManager = LocationManager() override func viewDidLoad() { super.viewDidLoad() locationManager.coordinateHandler = { [weak self] coordinate in self?.performSegue(withIdentifier: "showSecondViewController", sender: coordinate) } locationManager.startUpdatingLocation() } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let vc = segue.destination as? SecondViewController, let coordinate = sender as? CLLocationCoordinate2D { vc.coordinate = coordinate } } } |
1 2 3 4 5 6 7 8 9 10 11 |
class SecondViewController: UIViewController { var coordinate: CLLocationCoordinate2D? override func viewDidLoad() { super.viewDidLoad() if let coordinate = coordinate { // Используйте координаты для нужных операций } } } |
Таким образом, вы сможете получить географические координаты с помощью CoreLocation и передать их из одного View Controller в другой.