web-dev-qa-db-fra.com

Référence ambiguë au membre '=='

Ce doit être une erreur de base, mais je ne vois pas ce qui ne va pas dans ce code:

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

Au moment de la compilation, je reçois ce message:

Ambiguous reference to member '=='

Comparer un Int à 0 ne me semble pas ambigu, alors qu'est-ce qui me manque?

25
Michel

Le message d'erreur est trompeur. Le problème est que le compilateur n'a aucune information sur le type des valeurs .Zero, .NotZero faire référence à.

Le problème est également indépendant des objets gérés ou de la méthode valueForKey, vous obtiendrez le même message d'erreur pour

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

Le problème peut être résolu en spécifiant une valeur entièrement typée

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

ou en fournissant un contexte à partir duquel le compilateur peut déduire le type:

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

Retirer le bracelet semble fonctionner:

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

0
Tj3n