MapKitのCLGeocoder()。geocodeAddressString()を使用して、アドレスのリストの座標と郡情報を取得します。要求数が50を下回っている限り、すべての機能は素晴らしいですが、50以上のものはAPIの制限を超えています。 CLGeocoderコールは非同期であるため、コールのフローを簡単に調整/制御することはできません(たとえば、一度に1つのアドレスを呼び出すなど)。私は「非同期の世界」でこれを正しく行うにはどうしますか? (免責事項:私はGCDおよび非同期フロー制御の世界に新たなんだので、私は、私はより詳細な対応が必要かもしれないと思う):クラスのプロパティのCLGeocoder geocodeAddressString()制限を打つ
方法にCLGeocoderを呼び出します。ここ
は、関連するコードです物件の住所:
for line in importText {
let newAddress = Address()
let newHouse = Property()
// parse the tab delimited address for each line of input
let address = line.components(separatedBy: "\t")
if address.count == 4 {
newAddress.street = address[0]
newAddress.city = address[1]
newAddress.state = trimState(state: address[2])
newAddress.zip = address[3]
newHouse.address = newAddress
newHouse.initializeCoordinates()
houses.append(newHouse)
}
}
:テキストからの輸入のすべてのプロパティのアドレス(とすると、各プロパティの
initializeCoordinates
メソッドへの呼び出しを行うことImportVCでセクションで
func initializeCoordinates() {
let addressForCoords = self.address.getAddress()
CLGeocoder().geocodeAddressString(addressForCoords, completionHandler: { (placemarks, error) -> Void in
if error != nil {
print(error!)
return
}
if placemarks!.count > 0 {
let placemark = placemarks?[0]
let location = placemark?.location
self.coordinates = location?.coordinate
if let subAdminArea = placemark?.subAdministrativeArea {
self.address.county = subAdminArea
}
}
})
}
、その後、