1
使用MapKit的CLGeocoder()。geocodeAddressString()來獲取地址列表的座標和縣信息。只要請求數低於50,一切都可以工作,但超過50就會超出API的限制。由於CLGeocoder調用是異步的,因此我無法輕鬆地調節/控制調用流(例如,一次調用一個地址)。我如何在「異步世界」中正確執行此操作? (免責聲明:我是新來的GCD和異步流量控制的世界,所以我想我可能需要更詳細的迴應)CLGeocoder geocodeAddressString()達到極限
下面是相關代碼:
類屬性的方法是在調用CLGeocoder物業公司地址:
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
}
}
})
}
,然後在導入所有屬性的地址從一個文本框(並使得調用initializeCoordinates
方法對每個屬性ImportVC部分:
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)
}
}