Le code suivant permettait de compiler dans Swift 2.2, n'est plus dans Swift 3.0. Comment pouvons-nous résoudre ce problème?
Erreur: l'opérateur binaire '===' ne peut pas être appliqué aux opérandes de type 'Any?' et 'UIBarButtonItem!'
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if sender === saveButton { // Error!
// ...
} else if sender === closeButton { // Error!
// ...
}
}
Comme le message d'erreur le dit. Dans Swift 3, Objecitve-C id
est importé sous le nom Any
et vous ne pouvez appeler aucune opération pour Any
, y compris ===
, sans distribution explicite.
Essaye ça:
if sender as AnyObject? === saveButton {
(Tous les mêmes pour les autres comparaisons sender
.)
Et rappelez-vous, dans Swift 3, as AnyObject
est devenu l’une des opérations les plus risquées, vous ne devez pas utiliser as AnyObject
dans d'autres cas.
Essayez d’utiliser la liaison facultative avec la conversion conditionnelle pour établir le type de l’élément avant de comparer:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let sender = sender as? UIBarButtonItem, sender === saveButton {
// ...
} else if let sender = sender as? UIBarButtonItem, sender === closeButton {
// ...
}
}