Swift 2:错误:条件绑定的初始化程序必须具有可选类型,而不是函数中的'CLPlacemark'Geocoder
问题描述:
我正在创建一个基于位置的应用程序,我希望用户能够查看其位置的详细信息。为了显示他们的地址详情,我添加了一个新功能CLGeocoder
,用于查找详细信息。不过,我得到这个错误:Swift 2:错误:条件绑定的初始化程序必须具有可选类型,而不是函数中的'CLPlacemark'Geocoder
Initializer for conditional binding must have optional type, not 'CLPlacemark'.
我得到的错误:
if let p = CLPlacemark(placemark: placemarks![0] as! CLPlacemark)
CLGeocoder().reverseGeocodeLocation(userLocation) { (placemarks, error) in
if (error != nil) {
print(error)
}
else {
if let p = CLPlacemark(placemark: placemarks![0] as! CLPlacemark) {
}
}
}
答
表达了IF-让需求里面是可选的。 CLPlacemark初始化器永远不会返回可选值。如果你不确定是否标为零与否,事遂所愿
if let placemarkArray = placemarks {
let p = CLPlacemark(placemark: placemarkArray[0])
// Do stuff
}
}
否则,您不需要if let
...只是let
。
答
您不必明确创建CLPlacemark
实例,reverseGeocodeLocation
返回[CLPlacemark]?
成功。
CLGeocoder().reverseGeocodeLocation(userLocation) { (placemarks, error) in
if error != nil { // no parentheses in Swift!
print(error!)
}
else if let p = placemarks?.first {
// p is a non-optional CLPlacemark instance
// Do stuff
}
}
+0
非常感谢Vadian! –
写入令P = CLPlacemark(标:标[0])代替 如果设p = CLPlacemark(标:!标[0]作为CLPlacemark){ } – Axel