2016-10-17 3 views
0

Почему я получаю EXC_BAD_INSTRUCTION только с пустым вызовом geocodeAddressString:GLGeocoder geocodeAddressString врезается СВИФТ 3

geocoder.geocodeAddressString(address, completionHandler: {(placemarks: [CLPlacemark]?, error: NSError?) -> Void in 

} as! CLGeocodeCompletionHandler) 
+0

попробовать удалить «, как! CLGeocodeCompletionHandler ', почему вы вынуждаете кастинг? –

+0

см. Http://stackoverflow.com/questions/32655247/geocoder-geocodeaddressstring-no-longer-works-with-swift-update-today –

+0

Поскольку компилятор Swift продолжает помещать листинг в код. – jimijon

ответ

1

Проблема в вашем случае является то, что error является Error? ссылка в Swift 3, больше не NSError?. Таким образом, ваш вынужденный бросок терпит неудачу. Вы можете исправить это следующим образом:

geocoder.geocodeAddressString(address, completionHandler: {(placemarks: [CLPlacemark]?, error: Error?) -> Void in 

} as! CLGeocodeCompletionHandler) 

Но as! CLGeocodeCompletionHandler не требуется. Если это предложило бросить, возможно, это произошло только потому, что он заметил, что ваше закрытие не соответствует типу.

Честно говоря, даже проще, просто дайте ему вывести правильные типы и вам не придется беспокоиться о такого рода вопрос:

geocoder.geocodeAddressString(address) { placemarks, error in 

} 
+0

Я думал, что пробовал и с ошибкой, но, во всяком случае, ваш второй вариант работает ... спасибо. – jimijon

+0

Убедитесь, что вы используете [слабый я] в этом обратном вызове или можете сбой. – Gargoyle

+0

@ Gargoyle - Нет, это не сработает, если мы не сделаем '[слабое само». Использование '[unowned self]' может легко сработать, но не просто опустить '[слабое я"]. Что касается того, используете ли вы '[слабое я] или нет, это просто вопрос о том, нужно ли вам поддерживать сильную ссылку на рассматриваемый объект или нет. Если это просто обновление элементов управления пользовательским интерфейсом, то «[слабый я]» - хорошая идея. Но если вы делаете другие вещи тоже (например, обновляете модель или постоянное хранилище), то сохранение сильной ссылки может быть более уместным. Это просто зависит от того, что вы делаете в этом закрытии. – Rob