“从CLplacemark向下倾斜?到Clplacemark只展开可选”(swift2)

时间:2016-01-16 12:42:24

标签: swift2 downcast xcode7.2 clplacemark

如何解决此错误:

"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"

如何修复此错误?!

2 个答案:

答案 0 :(得分: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)"
}

答案 1 :(得分:0)

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

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

地标是CLPlacemark项的可选数组,因此不需要向下转换。您只需检查数组是否不是nil而不是空,如Alain T的答案中所述。