Доступ к координатам с адреса swift - PullRequest
0 голосов
/ 30 января 2020

Привет, как я могу получить доступ к параметрам долготы и широты за пределами этого блока?

 let geocoder = CLGeocoder()
        geocoder.geocodeAddressString(address) { placemarks, error in
           let placemark = placemarks?.first
           let lat = placemark?.location?.coordinate.latitude
           let lon = placemark?.location?.coordinate.longitude
           print("Lat: \(lat), Lon: \(lon)")
        }

Я хочу сохранить эти два параметра как Float или String в базе данных. Спасибо

1 Ответ

3 голосов
/ 30 января 2020

Вы можете создать такую ​​функцию:

func getLatAndLong(address : String, competion : @escaping (CLLocationCoordinate2D?) -> ()) {
    let geocoder = CLGeocoder()
    geocoder.geocodeAddressString(address) { placemarks, error in
        let placemark = placemarks?.first
        let lat = placemark?.location?.coordinate.latitude
        let lon = placemark?.location?.coordinate.longitude
        print("Lat: \(lat), Lon: \(lon)")
        competion(placemark?.location?.coordinate)
    }
}

и затем вызвать ее как:

var location : CLLocationCoordinate2D?
getLatAndLong(address: "pass your address here") { (coordinates) in
        self.location = coordinates
}

Теперь ваша переменная location содержит значение.

вы можете использовать его для получения широты и долготы

let latitide = location?.latitude
let longitude = location?.longitude

Опция 2

Вы можете объявить переменную в классе и обновить его вы цените, как только получите координаты. Я бы предложил использовать вышеуказанный подход, поскольку геокодер работает асинхронно. Лучше использовать обработчик завершения, чтобы узнать, когда геокодер завершил выполнение задачи и получил местоположение.

var latitude = 0.0 // 
var longitude = 0.0

let geocoder = CLGeocoder()
geocoder.geocodeAddressString("address") { placemarks, error in
    let placemark = placemarks?.first
    self.latitude = placemark?.location?.coordinate.latitude ?? 0.0
    self.longitude = placemark?.location?.coordinate.longitude ?? 0.0
}
...