Как получить географические координаты и передать их в другой view controller в swift?

Пользователь

от kameron , в категории: Swift , 2 года назад

Как получить географические координаты и передать их в другой view controller в swift?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от stephania , 2 года назад

@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 {
            // использовать координаты для чего-либо
        }
    }
}


Пользователь

от rebekah , 7 месяцев назад

@kameron 

Вот пример использования CoreLocation framework для получения географических координат и их передачи из одного View Controller в другой.

  1. Создайте класс LocationManager, который будет управлять получением текущего местоположения пользователя:
 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. В первом View Controller'e используйте LocationManager для получения координат и передачи их во второй View Controller:
 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. Во втором View Controller'e принимайте и используйте переданные географические координаты:
 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 в другой.