我收到此错误,我无法弄清楚如何修复它。我已经在这里完成了所有的答案,但我尝试的任何工作都没有。这是我的代码:
CLGeocoder().reverseGeocodeLocation(location, completionHandler: { (placemarks, error ) -> Void in
var title = ""
if (error == nil) {
if let p = CLPlacemark(placemark: placemarks![0] as! CLPlacemark){
var subThoroughfare:String = ""
var thoroughfare:String = ""
if p.subThoroughfare != nil{
subThoroughfare = p.subThoroughfare
}
if p.thoroughfare != nil{
thoroughfare = p.thoroughfare
}
title = "\(subThoroughfare) \(thoroughfare)"
}
}
if title == ""{
title = "Added \(NSDate())"
}
错误在线:
if let p = CLPlacemark(placemark: placemarks![0] as! CLPlacemark){
条件绑定的初始化程序必须具有可选类型,而不是'CLPlacemark'
答案 0 :(得分:9)
您报告错误:
条件绑定的初始化程序必须具有可选类型,而不是'CLPlacemark'
这是因为您正在调用CLPlacemark(placemark: CLPlacemark)
,但这并没有返回可选项。所以它抱怨你使用if let
语法,这只对选项有效。
但是你真的不想这样强迫展开placemarks
,我建议你完全消除!
。此外,鉴于在Swift 2中,placemarks
现在是[CLPlacemark]?
,您可以完全消除强制转换,从而简化if
语句:
if let placemark = placemarks?.first {
let subThoroughfare = placemark.subThoroughfare ?? ""
let thoroughfare = placemark.thoroughfare ?? ""
title = "\(subThoroughfare) \(thoroughfare)"
}
注意,您也可以简化thoroughfare
和subThoroughfare
实施,如上所示。
答案 1 :(得分:-2)
这很有效。
如果让p =地标?[0]