Swift 使用数据进行反向地理编码
Swift Reverse Geocoding using the Data
我正在根据我的位置成功获取当前地址详细信息。它完美打印。让我感到困惑的是我如何从此调用中提取数据。我试过将 ZIP/Postcode 作为局部甚至全局变量传递,但没有任何乐趣。数据似乎只存在于这个调用中。我如何在其他地方使用它?
// Get Address Information
let geoCoder = CLGeocoder()
let newLocation = CLLocation(latitude: valueLatitude, longitude: valueLongitude)
geoCoder.reverseGeocodeLocation(newLocation, completionHandler: {(placemarks: [AnyObject]!, error: NSError!) in
if error != nil {
println("Geocode failed with error: \(error.localizedDescription)")
}
if placemarks.count > 0 {
let placemark = placemarks[0] as! CLPlacemark
let addressDictionary = placemark.addressDictionary
let address = addressDictionary[kABPersonAddressStreetKey] as! NSString
let city = addressDictionary[kABPersonAddressCityKey] as! NSString
let state = addressDictionary[kABPersonAddressStateKey] as! NSString
let postcode = addressDictionary[kABPersonAddressZIPKey] as! NSString
let country = addressDictionary[kABPersonAddressCountryKey] as! NSString
println("\(address) \(city) \(state) \(postcode) \(country)") }
})
您的问题很可能是由于 reverseGeocodeLocation 是对 Apple 服务器发出的异步请求。
需要发生的是:
- 您调用reverseGeocodeLocation
- reverseGeocodeLocation 完成,开始完成它调用一个传递您刚刚恢复的地标的方法。
为了做到这一点:
@IBAction func btnInsertClicked(sender: AnyObject) {
var locationRecord: LocationRecord = LocationRecord()
// Get Address Information
let geoCoder = CLGeocoder()
let newLocation = CLLocation(latitude: valueLatitude, longitude: valueLongitude)
geoCoder.reverseGeocodeLocation(newLocation, completionHandler:
{(placemarks: [AnyObject]!, error: NSError!) in
if error != nil {
println("Geocode failed with error: (error.localizedDescription)")
}
if placemarks.count > 0 {
let myPlacemark = placemarks[0] as! CLPlacemark
// Here call the method that uses myPlacemark
self.myAwesomeMethod(placemarks[0] as! CLPlacemark)
} else {
println("No placemark")
}
})
}
您需要在代码中使用它的地方:
func myAwesomeMethod(placemark: CLPlacemark) {
// Do stuff with placemark
}
我 mac 直到今晚才会有,但如果这不起作用,请发表评论,我们会解决这个问题
我正在根据我的位置成功获取当前地址详细信息。它完美打印。让我感到困惑的是我如何从此调用中提取数据。我试过将 ZIP/Postcode 作为局部甚至全局变量传递,但没有任何乐趣。数据似乎只存在于这个调用中。我如何在其他地方使用它?
// Get Address Information
let geoCoder = CLGeocoder()
let newLocation = CLLocation(latitude: valueLatitude, longitude: valueLongitude)
geoCoder.reverseGeocodeLocation(newLocation, completionHandler: {(placemarks: [AnyObject]!, error: NSError!) in
if error != nil {
println("Geocode failed with error: \(error.localizedDescription)")
}
if placemarks.count > 0 {
let placemark = placemarks[0] as! CLPlacemark
let addressDictionary = placemark.addressDictionary
let address = addressDictionary[kABPersonAddressStreetKey] as! NSString
let city = addressDictionary[kABPersonAddressCityKey] as! NSString
let state = addressDictionary[kABPersonAddressStateKey] as! NSString
let postcode = addressDictionary[kABPersonAddressZIPKey] as! NSString
let country = addressDictionary[kABPersonAddressCountryKey] as! NSString
println("\(address) \(city) \(state) \(postcode) \(country)") }
})
您的问题很可能是由于 reverseGeocodeLocation 是对 Apple 服务器发出的异步请求。
需要发生的是:
- 您调用reverseGeocodeLocation
- reverseGeocodeLocation 完成,开始完成它调用一个传递您刚刚恢复的地标的方法。
为了做到这一点:
@IBAction func btnInsertClicked(sender: AnyObject) {
var locationRecord: LocationRecord = LocationRecord()
// Get Address Information
let geoCoder = CLGeocoder()
let newLocation = CLLocation(latitude: valueLatitude, longitude: valueLongitude)
geoCoder.reverseGeocodeLocation(newLocation, completionHandler:
{(placemarks: [AnyObject]!, error: NSError!) in
if error != nil {
println("Geocode failed with error: (error.localizedDescription)")
}
if placemarks.count > 0 {
let myPlacemark = placemarks[0] as! CLPlacemark
// Here call the method that uses myPlacemark
self.myAwesomeMethod(placemarks[0] as! CLPlacemark)
} else {
println("No placemark")
}
})
}
您需要在代码中使用它的地方:
func myAwesomeMethod(placemark: CLPlacemark) {
// Do stuff with placemark
}
我 mac 直到今晚才会有,但如果这不起作用,请发表评论,我们会解决这个问题