2017-07-20 10 views
0

にカスタム注釈をキャストMKAnnotationやCKAnnotationの一部ではないMyAnnotationsのプロパティは、サイズや所有者のように私は以下のようにします。スウィフトは、私は、アノテーションクラスター(<a href="https://github.com/hulab/ClusterKit" rel="nofollow noreferrer">Cluster</a>この1)を使用私のアプリではMKAnnotation

let MyAnnotations = annotation as! MyAnnotations 

let size = MyAnnotations.size 

i get error: Could not cast value of type 'NSKVONotifying_CKCluster' (0x60000011dc70) to 'app.MyAnnotations'

これらのプロパティにアクセスする方法はありますか?

EDIT:

let annotation = MyAnnotations(coordinate: location) 
         annotation.coordinate = location 
         annotation.title = name 
         annotation.subtitle = specie 
         annotation.size = size 
         annotation.owner = owner 
         annotation.user = user 
         annotation.image = pictureurl 
         annotation.latLoc = lat 
         annotation.lonLoc = lon 
         annotation.itemId = itemId 
+0

あなたのコードに誤ってタイプミスがあります:あなたは変数 'MyAnnotations'を呼び出してから、' MyAnnotation.size'を呼び出そうとします。また、変数にクラス名と同じ名前を付け、適切なSwift命名規則(クラス: 'MyAnnotations'、変数:' myAnnotation')を使用します。 –

+0

私はタイプミスを編集しました。(コピーエラー) – HaVaNa7

+0

注釈を定義するコードを表示してください。アノテーションは 'CKCluster'型のようです。サブクラスではないので、明らかに' MyAnnotations'にキャストできません。 –

答えて

1

MKAnnotationは、あなたがこれらのプロトコルMKAnnotation, CKAnnotationに準拠MyAnnotations一方coordinatetitlesubtitle

カスタムクラスを持つだけのプロトコルです。これらのコンホメーションは、プロトコルのシグネチャにあるものだけを提供することができます。

annotation: MKAnnotationにはsizeというプロパティがありません。これをカスタムクラスにキャストするとすぐに、サブクラスや他のものではないので、そのようなエラーが発生します。

size情報が読まれることはありませんでした。だからキャスティングはここで助けにはならない。 as!を使用して強制的にキャストするときは、基本的にコンパイラが何をすることができるのかをサイレンシングしています。

カスタムクラスのマッパーを作成し、このフェーズで他のデータをフィードし、すべてを1つに沸騰させることをお勧めします。

+0

thnx男、ウェブでサンプルを見せてもらえますか? – HaVaNa7

+0

@ HaVaNa7私はあなたの質問のための一般的な例があるとは思わない。私はあなたの質問がドメイン特有であると仮定します。問題は 'size'や' owner'のようなフィールドの情報源は何ですか?この場合は間違いなくマップです。別のインスタンスは、その情報を保持している必要があります。 – erenkabakci

+0

ソースがfirebaseである、私はすべてのオブジェクトで作られた配列を作ってから、クラスタマネージャー – HaVaNa7

関連する問題

 関連する問題