2016-01-16 6 views
0

как исправить эту ошибку:"опущенный от CLplacemark к Clplacemark только разворачивает опционально?" (Swift2)

"downcast from CLplacemark? to Clplacemark only unwraps optional" 

поэтому я использую этот код:

if let p = CLPlacemark(placemark: placemarks.first as? CLPlacemark){} 

и изменить метки [0] массив но не работает

и мой код:

CLGeocoder().reverseGeocodeLocation(userLocation) { (placemarks, error) -> Void in 

    if error == nil { 

     if let p = CLPlacemark(placemark: placemarks[0] as? CLPlacemark){ 

      print(p) 
      self.adsresslabel.text = "\(p.administrativeArea)\(p.postalCode)\(p.country)" 
     } 


    }else { 
     print (error) 
    } 


    } 

в этом коде:

if let p = CLPlacemark(placemark: placemarks[0] as? CLPlacemark) 

У меня есть ошибка о

"downcast from CLplacemark? to Clplacemark only unwraps optional" 

как исправить эту ошибку?!

ответ

0

Если вы на самом деле не нужны, чтобы сделать копию первых меток, вам только нужно сделать:

if let p = placemarks.first 
{ 
     print(p) 
     self.adsresslabel.text = "\(p.administrativeArea)\(p.postalCode)\(p.country)" 
} 

С другой стороны, если вам это нужно, чтобы быть копией:

if let p0 = placemarks.first 
{ 
     let p = CLPlacemark(placemark:p0) 
     print(p) 
     self.adsresslabel.text = "\(p.administrativeArea)\(p.postalCode)\(p.country)" 
} 
0

обработчик завершения reverseGeocodeLocation:completionHandler объявлен как

typealias CLGeocodeCompletionHandler = ([CLPlacemark]?, NSError?) -> Void 

в метках являются необязательным rray из CLPlacemark предметов, поэтому приклада не требуется. Вам нужно только проверить, не массив ли nil, а не пустой, как описано в ответе Алена Т.