对成员'=='的模糊引用

Mic*_*hel 25 arithmetic-expressions operators ios swift

这一定是一个基本错误,但我看不出这段代码有什么问题:

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

在编译时,我收到此消息:

Ambiguous reference to member '=='
Run Code Online (Sandbox Code Playgroud)

将Int与0比较对我来说似乎并不含糊,所以我错过了什么?

Mar*_*n R 44

错误消息具有误导性.问题是,编译器有没有什么信息键入数值.Zero,.NotZero参考.

该问题也与托管对象或valueForKey 方法无关,您将收到相同的错误消息

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

可以通过指定完全类型的值来解决该问题

let eltType = value == 0 ? MyEnum.Zero : .NotZero
Run Code Online (Sandbox Code Playgroud)

或者通过提供编译器可以推断出类型的上下文:

let eltType: MyEnum = value == 0 ? .Zero : .NotZero
Run Code Online (Sandbox Code Playgroud)