Подтвердить что ты не робот

Неоднозначная ссылка на член '=='

Это должна быть основная ошибка, но я не вижу, что не так в этом коде:

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

Во время компиляции я получаю следующее сообщение:

Ambiguous reference to member '=='

Сравнение Int с 0 не кажется мне двусмысленным, так что мне не хватает?

4b9b3361

Ответ 1

Сообщение об ошибке вводит в заблуждение. Проблема в том, что компилятор имеет нет информации о том, к какому типу относятся значения .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

Ответ 2

Убрать браслет, кажется, работает:

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