2016-10-21 7 views
0

スウィフト3には、のメソッドには常にエラーがあります。以下のコードではif annotation is MKAnnotationが渡され、次の行に進みます。その後、エラーが発生します。私は多くを検索しましたが、問題を見つけることができませんでした。この問題の解決策はありますか?XXの値を即時にXXにキャストできませんでした3

クラスの宣言:

open class FBAnnotation : NSObject { 
    open var coordinate = CLLocationCoordinate2D(latitude: 52.0936440, longitude: 4.3592340) 
    open var title: String? = "" 
    open var annotationIndex: Int? 
} 

extension FBAnnotation : MKAnnotation { 
} 

使用法:これは運動場で働く

do { 
    if annotation is MKAnnotation { 
     if try node.annotations.contains(where: annotation as! (MKAnnotation) throws -> Bool) { 
      try node.annotations.remove(at: node.annotations.index(where: annotation as! (MKAnnotation) throws -> Bool)!) 
      node.count -= 1 
      return true 
     } 
    } 
} catch { 
    return false 
} 
+0

ノードはどのタイプですか?また、** is **の代わりに、注釈をアンラップするために**を使用すると**を使用できます:** let注釈=注釈をlet? MKAnnotation {** –

答えて

1

、何のキャストは必要ありません。アノテーションをwhereパラメータとして渡すことはできません。注釈があなたが探しているものかどうかを宣言する関数を渡す必要があります。ここでは、彼らが同じ座標を持っている場合、彼らは一致すると見なしますが、あなたの一致基準は異なるかもしれません。

var annotations = [MKAnnotation]() 
    var annotation: Any? = nil 
    if let annotation = annotation as? MKAnnotation { 
     if let index = annotations.index(where: { 
      $0.coordinate.latitude == annotation.coordinate.latitude && 
      $0.coordinate.longitude == annotation.coordinate.longitude 
     }) { 
      annotations.remove(at: index) 
     } 
    } 
+0

この場合、条件閉包がtrueを返さない – Saranya

+0

ノードタイプを表示するために質問を更新しました。ここではノードはFBAnnotationです。これはMKAnnotationのタイプです – Saranya

+0

実際には実行されない内部のクロージャーです。私はそれが問題だと思う。 – Saranya

関連する問題