2016-07-19 4 views
24

あいまいな参照「==」

.... object is some NSManagedObject .... 
let eltType = ((object.valueForKey("type")! as! Int) == 0) ? .Zero : .NotZero 

コンパイル時に、私はこのメッセージが表示されます

Ambiguous reference to member '==' 

Intを0と比較することはあまり曖昧ではないようですので、何が分かりませんか?

答えて

41

エラーメッセージは誤解を招く恐れがあります。問題は、コンパイラにはの情報がありません。どのタイプの値が.Zero,.NotZeroとなるのですか。

問題は、管理対象オブジェクトまたはvalueForKey 方法とは無関係である、あなたは完全に入力した値

let eltType = value == 0 ? MyEnum.Zero : .NotZero 
を指定することで解決することができる

func foo(value: Int) { 
    let eltType = value == 0 ? .Zero : .NotZero // Ambiguous reference to member '==' 
    // ... 
} 

問題のために、同じエラーメッセージが出ます

を使用するか、またはコンパイラが型を推論できるコンテキストを提供することによって行われます。

let eltType: MyEnum = value == 0 ? .Zero : .NotZero 
+1

タイプを追加することによって、それが機能することは事実です。しかし、三項演算子を使用する代わりにif(){...} else {...}という形式を使用すると、型なしで動作します。私はその違いをあまり見ない。型推論のためのコンパイラの処分時の情報は同じようです。 – Michel

+0

@Michel:タイプなしで動作するif/elseステートメントは正確に何ですか? –

+0

私がやったことをもう一度見てみると、変数を宣言するときに、ある時点で型を指定した可能性があります。あなたが書いたことを正しいものにする。 – Michel

0

ブレスレットを外し作品に思える:

let eltType = (object.valueForKey("type")! as! Int) == 0 ? .Zero : .NotZero

+0

括弧を削除しても私には違いはありません。 – Michel

関連する問題