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的回答中所述为空