Я меняю геокод в нескольких местах на моей карте, и я хотел обернуть его некоторым распространенным методом. Что у меня есть это в качестве отправной точки, которая работает:обратные вызовы, обработчик завершения с несколькими параметрами в swift
func reverseGeocodeLocation(location: CLLocation, completion: (CLPlacemark) -> Void) {
let geocoder = CLGeocoder()
geocoder.reverseGeocodeLocation(location) {
(placemarks, error) -> Void in
// Check for returned placemarks
if let placemarks = placemarks where placemarks.count > 0 {
let topResult = placemarks[0] as! CLPlacemark
completion(topResult)
}
}
}
Однако, если я хочу добавить еще один параметр мой метод завершения, который будет возвращать ошибку на мой взгляд, как так:
func reverseGeocodeLocation(location: CLLocation, completion: (CLPlacemark, NSError) -> Void) {
let geocoder = CLGeocoder()
geocoder.reverseGeocodeLocation(location) {
(placemarks, error) -> Void in
// Check for returned placemarks
if let placemarks = placemarks where placemarks.count > 0 {
let topResult = placemarks[0] as! CLPlacemark
completion(topResult, error)
}
}
}
Если ошибка nil
, то мой completion(topResult, error)
не будет работать, потому что ошибка равна нулю с плохим доступом. Но я не могу этого сделать, поскольку параметры не соответствуют обработчику завершения.
if error != nil {
completion(topResult)
} else {
completion(...) // do something with the error
}
Итак, если у меня есть ошибка nil, как я могу назвать обработчик завершения? Благодарю.
Я думаю, что ошибка должна быть необязательной в этом случае? Также какова полная подпись метода geocoder.reverseGeocodeLocation? – Shripada