.... object is some NSManagedObject ....
let eltType = ((object.valueForKey("type")! as! Int) == 0) ? .Zero : .NotZero
コンパイル時に、私はこのメッセージが表示されます
Ambiguous reference to member '=='
Intを0と比較することはあまり曖昧ではないようですので、何が分かりませんか?
.... object is some NSManagedObject ....
let eltType = ((object.valueForKey("type")! as! Int) == 0) ? .Zero : .NotZero
コンパイル時に、私はこのメッセージが表示されます
Ambiguous reference to member '=='
Intを0と比較することはあまり曖昧ではないようですので、何が分かりませんか?
エラーメッセージは誤解を招く恐れがあります。問題は、コンパイラにはの情報がありません。どのタイプの値が.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
ブレスレットを外し作品に思える:
let eltType = (object.valueForKey("type")! as! Int) == 0 ? .Zero : .NotZero
括弧を削除しても私には違いはありません。 – Michel
タイプを追加することによって、それが機能することは事実です。しかし、三項演算子を使用する代わりにif(){...} else {...}という形式を使用すると、型なしで動作します。私はその違いをあまり見ない。型推論のためのコンパイラの処分時の情報は同じようです。 – Michel
@Michel:タイプなしで動作するif/elseステートメントは正確に何ですか? –
私がやったことをもう一度見てみると、変数を宣言するときに、ある時点で型を指定した可能性があります。あなたが書いたことを正しいものにする。 – Michel