我想将用户的位置,其中包含纬度和经度的值,转换成准确的地址。但是它不起作用,它在执行后返回一个空字符串。
此外,Xcode建议我使用CNPostalAddress,我不知道它是什么。
这是函数
import Foundation
import CoreLocation
import AddressBook`
func reverseGeocoder()->String{
let info:String?
var geocoder = CLGeocoder()
var currentUserLocation = CLLocation(latitude: 30, longitude: 122)
geocoder.reverseGeocodeLocation(currentUserLocation, completionHandler: {
(placemarks,error) -> Void in
if placemarks != nil && placemarks?.count > 0{
let placemark = placemarks![0] as CLPlacemark
let addressDictionary = placemark.addressDictionary! as NSDictionary
let str:NSMutableString = ""
if let address = addressDictionary.objectForKey(kABPersonAddressStreetKey) as? String{
str.appendString(address)
}
if let state = addressDictionary.objectForKey(kABPersonAddressStateKey) as? String{
str.appendString(state)
}
if let city = addressDictionary.objectForKey(kABPersonAddressCityKey) as? String{
str.appendString(city)
}
info = str as String
}
}
)
return info
}以下是警告

如果你能帮我修好它,我会很感激的:)
发布于 2016-08-30 13:48:28
将import AddressBook替换为import Contacts,同时也替换
addressDictionary.objectForKey(kABPersonAddressStreetKey)与addressDictionary.objectForKey(CNPostalAddress.Street)
addressDictionary.objectForKey(kABPersonAddressStateKey)与addressDictionary.objectForKey(CNPostalAddress.State)
addressDictionary.objectForKey(kABPersonAddressCityKey)与addressDictionary.objectForKey(CNPostalAddress.City)
您可以在苹果甜甜圈中获得更多信息
使用完成
func reverseGeocoder (completion: (info:String) -> Void){
var geocoder = CLGeocoder()
var currentUserLocation = CLLocation(latitude: 30, longitude: 122)
geocoder.reverseGeocodeLocation(currentUserLocation, completionHandler: {
(placemarks,error) -> Void in
if placemarks != nil && placemarks?.count > 0{
let placemark = placemarks![0] as CLPlacemark
let addressDictionary = placemark.addressDictionary! as NSDictionary
let str:NSMutableString = ""
if let address = addressDictionary.objectForKey(kABPersonAddressStreetKey) as? String{
str.appendString(address)
}
if let state = addressDictionary.objectForKey(kABPersonAddressStateKey) as? String{
str.appendString(state)
}
if let city = addressDictionary.objectForKey(kABPersonAddressCityKey) as? String{
str.appendString(city)
}
completion(info: str as String)
}
}
)发布于 2016-08-30 13:48:52
发布于 2016-08-30 13:49:07
if let coordinates = base.coOrdinates
{
if let lat = coordinates.lat {
let location = CLLocation(latitude: lat, longitude: coordinates.lon!)
let reverseGeocoder = CLGeocoder()
reverseGeocoder.reverseGeocodeLocation(location, completionHandler: {place,_ in
//print(place)
let myPlacemark = place![0]
let countryName = myPlacemark.country
let cityName = myPlacemark.subAdministrativeArea
let streetName = myPlacemark.subLocality
NSOperationQueue.mainQueue().addOperationWithBlock {
self.lastLocationLabel.text = "\(streetName!), \(cityName!), \(countryName!)"
}
})
} else {
self.lastLocationLabel.text = "Not available"
}
}也许能帮到你。我就是这样从坐标中得到位置字符串的。
https://stackoverflow.com/questions/39229190
复制相似问题