Swift2 &引用;从CLplacemark往下看?Clplacemark仅展开可选的";(迅捷2)

Swift2 &引用;从CLplacemark往下看?Clplacemark仅展开可选的";(迅捷2),swift2,downcast,xcode7.2,clplacemark,Swift2,Downcast,Xcode7.2,Clplacemark,如何修复此错误: "downcast from CLplacemark? to Clplacemark only unwraps optional" 所以我使用这个代码: if let p = CLPlacemark(placemark: placemarks.first as? CLPlacemark){} if let p = CLPlacemark(placemark: placemarks[0] as? CLPlacemark) 并更改placemarks[0]数组,但不起作用 我

如何修复此错误:

"downcast from CLplacemark? to Clplacemark only unwraps optional"
所以我使用这个代码:

if let p = CLPlacemark(placemark: placemarks.first as? CLPlacemark){}
if let p = CLPlacemark(placemark: placemarks[0] 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.first as? CLPlacemark){}
if let p = CLPlacemark(placemark: placemarks[0] as? CLPlacemark)
我有个错误

 "downcast from CLplacemark? to Clplacemark only unwraps optional"

如何修复此错误

如果您实际上不需要复制第一个placemark,您只需要执行以下操作:

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

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

typealias CLGeocodeCompletionHandler = ([CLPlacemark]?, NSError?) -> Void
placemark是
CLPlacemark
项的可选数组,因此不需要向下转换。您只需检查数组是否不是
nil
,并且是否如Alain T的回答中所述为空