1
GeoCodeリクエストは一度に1つしか実行できず、非同期であるため、直前のGeoCodeリクエストが終了するとすぐに次のリクエストを開始する必要があります。Swift:ジオコーディングの再帰を伴う非同期ループ
func one() {
let geocoder = CLGeocoder()
let one = myPlacesFakeData[0]
geocoder.geocodeAddressString(one.address, completionHandler: { (placemarks, error) in
if let error = error {
print("Unable to Reverse Geocode Location (\(error))")
} else {
if let placemarks = placemarks, let placemark = placemarks.first {
myPlacesFakeData[0].latitude = placemark.location?.coordinate.latitude
myPlacesFakeData[0].longitude = placemark.location?.coordinate.longitude
} else {
print("No Matching Address Found")
}
}
self.two()
})
}
func two() {
let geocoder = CLGeocoder()
let two = myPlacesFakeData[1]
geocoder.geocodeAddressString(two.address, completionHandler: { (placemarks, error) in
if let error = error {
print("Unable to Reverse Geocode Location (\(error))")
} else {
if let placemarks = placemarks, let placemark = placemarks.first {
myPlacesFakeData[1].latitude = placemark.location?.coordinate.latitude
myPlacesFakeData[1].longitude = placemark.location?.coordinate.longitude
} else {
print("No Matching Address Found")
}
}
self.three()
})
}
func three() {
let geocoder = CLGeocoder()
let three = myPlacesFakeData[2]
geocoder.geocodeAddressString(three.address, completionHandler: { (placemarks, error) in
if let error = error {
print("Unable to Reverse Geocode Location (\(error))")
} else {
if let placemarks = placemarks, let placemark = placemarks.first {
myPlacesFakeData[2].latitude = placemark.location?.coordinate.latitude
myPlacesFakeData[2].longitude = placemark.location?.coordinate.longitude
} else {
print("No Matching Address Found")
}
}
})
}
しかし、これはゲットーであり、私がGeoCodeにしようとしている場所がちょうど3つあることに依存しています。
私は再帰関数とカウンタが必要だと思いますが、これを書く方法はわかりません。どんな助けでも大歓迎です。
Andrew、ありがとうございました。完璧に働いた。 –