0

如何解决此错误:

"downcast from CLplacemark? to Clplacemark only unwraps optional"

所以我使用这段代码:

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

并更改 placemarks[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"

如何解决这个错误?!

4

2 回答 2

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)"
}
于 2016-01-17T01:30:06.460 回答
0

的完成处理程序reverseGeocodeLocation:completionHandler声明为

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

地标是一个可选的CLPlacemark项目数组,因此不需要向下转换。您只需按照nilAlain T 的回答中所述检查数组是否为空且不为空。

于 2016-01-18T08:30:26.400 回答