2016-12-27 3 views
-1

私は、ユーザにその場所の詳細を表示させたい場所ベースのアプリケーションを作成しています。住所の詳細を表示するために、私は詳細を見つけるために、新しい機能、CLGeocoderを追加しました。スウィフト2:エラー:条件付きバインディングの初期化ツールには、機能のジオコーダ「CLPlacemark」ではなく、オプションのタイプが必要です

Initializer for conditional binding must have optional type, not 'CLPlacemark'.

私はエラーを取得する:オプションのようにIF-せニーズの内側に

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

書き込みLETのP = CLPlacemark(目印:目印[0])の代わりに P = CLPlacemarkせた場合(目印:!目印[0] CLPlacemarkとして){ } – Axel

答えて

0

表現しかし、私はこのエラーを取得します。 CLPlacemark初期化子は決してオプションの値を返しません。あなたがわからない場合は目印がnilであるかどうか、そして

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

のようなものは、そうでない場合、あなたはif let ...ちょうどletを必要としません。

+0

それはまだ動作していない –

+0

をそれはあなたに同じエラー、または別のものを与えていますか? – Samantha

+0

コードを貼り付けたら、疑問符を感嘆符で置き換えるように指示します。私は今どうすればいい? –

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 !!!ありがとうございます。 –

関連する問題