То, что я пытаюсь сделать, это передать CLLocation
функции getPlacemarkFromLocation
, которая затем использует пройденный CLLocation
через reverseGeocodeLocation
, чтобы установить CLPlacemark?
, который будет возвращен.
У меня возникли проблемы с созданием закрытия completionHandler
в reverseGeocodeLocation
, , который бросает ошибку/сбой компилятора:
В Swift CLGeocodeCompletionHandler
CLGeocodeCompletionHandler = (AnyObject[]!, NSError!) -> Void
в соответствии с документацией AnyObject[]!
должен содержать CLPlacemark
объекты, подобные версии Objective-C.
Вот мой текущий код:
class func getPlacemarkFromLocation(location:CLLocation)->CLPlacemark?{
var g = CLGeocoder()
var p:CLPlacemark?
g.reverseGeocodeLocation(location, completionHandler: {
(placemarks, error) in
let pm = placemarks as? CLPlacemark[]
if (pm && pm?.count > 0){
p = placemarks[0] as? CLPlacemark
}
})
return p?
}
EDIT: Кажется, что ошибка связана с placemarks.count
, когда placemarks
не обрабатывается как массив. Теперь он компилируется, но я не получаю ничего, кроме нуля, когда пытаюсь установить p
внутри completionHandler
. Я проверил переданный CLLocation
и они действительны.
ИЗМЕНИТЬ 2: После печати placemarks
я могу подтвердить, что он возвращает данные. Однако p
по-прежнему возвращает nil.