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

     } 

    } 
+0

写入令P = CLPlacemark(标:标[0])代替 如果设p = CLPlacemark(标:!标[0]作为CLPlacemark){ } – Axel

表达了IF-让需求里面是可选的。 CLPlacemark初始化器永远不会返回可选值。如果你不确定是否标为零与否,事遂所愿

if let placemarkArray = placemarks { 
      let p = CLPlacemark(placemark: placemarkArray[0]) 
      // Do stuff 
     } 
    } 

否则,您不需要if let ...只是let

+0

它仍然不工作 –

+0

它给你同样的错误还是不同的错误? – Samantha

+0

当我粘贴代码时,它会让我用感叹号替换问号。我现在应该怎么做? –

您不必明确创建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! –