如何解决此错误:
"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 :(得分: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的答案中所述。