Opérateur binaire '===' ne peut pas être appliquée à des opérandes de type "Tout?" et " UIBarButtonItem!'
Le code suivant est utilisé pour être en mesure de compiler en swift 2.2, non plus en swift 3.0. Comment pouvons-nous résoudre ce problème?
Erreur: opérateur Binaire '===' ne peut pas être appliquée à des opérandes de type "Tout?" et " UIBarButtonItem!'
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if sender === saveButton { //Error!
//...
} else if sender === closeButton { //Error!
//...
}
}
- Pourquoi n'avez-vous pas simple de comparer avec
==
? - Bonjour @EvgenyKarkan, parce que je ne veux pas comparer la valeur de ces deux objets. Mais au lieu de cela, j'ai besoin de savoir s'ils sont de la même instance. Voir ce pour plus de détails: Swift fournit également deux de l'identité des opérateurs (=== et !==), qui vous permet de tester si deux références de l'objet à la fois se référer à la même instance d'objet.
Vous devez vous connecter pour publier un commentaire.
Que le message d'erreur, c'est dire. Dans Swift 3, Objecitve-C
id
est importé en tant queAny
, et vous ne pouvez pas appeler toutes les opérations pourAny
y compris===
, sans cast explicite.Essayez ceci:
(Tout de même pour les autres
sender
comparaison).Et n'oubliez pas, dans Swift 3,
as AnyObject
est devenu l'un des plus risqués, vous ne devez pas utiliseras AnyObject
dans les autres cas.id
importé avant la Swift 3?id
a été importé commeAnyObject
, et seulement une partie limitée de types de valeur de Swift pourrait être converti àAnyObject
._SwiftValue
exemple, lorsque vous utilisezas AnyObject
.Essayez d'utiliser en option liaison avec conditionnelle en fonte d'établir le type de l'élément avant de comparer: