web-dev-qa-db-ja.com

メンバー '=='へのあいまいな参照

それは基本的な間違いであるに違いありませんが、このコードの何が悪いのかわかりません。

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

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

Ambiguous reference to member '=='

Intを0と比較することは私にはあいまいではないようですが、何が欠けていますか?

25
Michel

エラーメッセージは誤解を招くものです。問題は、コンパイラーが値の型.Zero.NotZero 参照する。

この問題は、管理対象オブジェクトまたはvalueForKeyメソッドとも無関係です。同じエラーメッセージが表示されます

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

この問題は、完全に型指定された値を指定することで解決できます

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

または、コンパイラが型を推測できるコンテキストを提供することにより:

let eltType: MyEnum = value == 0 ? .Zero : .NotZero
44
Martin R

ブレスレットを削除すると動作するようです:

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

0
Tj3n