如何解决CLGeocoder始终为纬度/经度返回{nil
我正在尝试获取经纬度坐标以与基于位置的提醒配合使用(Eventkit) 该地址有效且已正确发送到函数,如果我为坐标提供了一个可选值,则由函数ok返回,因此该函数似乎可以正常工作,但地理编码器未按预期转换地址。 我不明白为什么不会。
var lat: Double?
var lon: Double?
func getLocation(address: String) -> CLLocation {
let geocoder = CLGeocoder()
geocoder.geocodeAddressstring(address) { placemarks,error in
guard let placemark = placemarks?.first else { return }
let coordinate = placemark.location?.coordinate
lat = coordinate?.latitude //Is always nil
lon = coordinate?.longitude //Is always nil
}
// Note: providing ?? sample coordinates in the return below works
return CLLocation(latitude: lat!,longitude: lon!)
}
if self.locationChoice == "Dog's Home" {
let address = "\(self.dog.addressLine1),\(self.dog.town),\(self.dog.postcode)"
let structuredLocation = EKStructuredLocation(title: address)
structuredLocation.geoLocation = getLocation(address: address)// asking for CLLocation
structuredLocation.radius = 500
let alarm = EKAlarm()
if self.whenArrivingOrLeaving == 0 {
alarm.proximity = EKAlarmProximity.enter
}else {
alarm.proximity = EKAlarmProximity.leave
}
alarm.structuredLocation = structuredLocation
newReminder.addAlarm(alarm)
}
解决方法
从异步方法返回值而不是零应该使用补全
func getLocation(address: String,completion:@escaping(CLLocation? -> ())) {
let geocoder = CLGeocoder()
geocoder.geocodeAddressString(address) { placemarks,error in
guard let placemark = placemarks?.first else { return }
completion(placemark.location)
}
}
致电
getLocation(address: address) { loc in
// embed all code here
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。