Двоичный оператор '===' не может применяться к операндам типа "Любой"? и 'UIBarButtonItem!'
Следующий код, используемый для компиляции в swift 2.2, больше не используется в swift 3.0. Как мы это исправим?
Ошибка: двоичный оператор '===' не может применяться к операндам типа "Any?". и 'UIBarButtonItem!'
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if sender === saveButton { // Error!
// ...
} else if sender === closeButton { // Error!
// ...
}
}
Ответы
Ответ 1
Как говорится в сообщении об ошибке. В Swift 3 Objecitve-C id
импортируется как Any
, и вы не можете вызывать никаких операций для Any
, включая ===
, без явного приведения.
Попробуйте следующее:
if sender as AnyObject? === saveButton {
(Все равно для сравнения sender
.)
И помните, что в Swift 3 as AnyObject
стала одной из самых рискованных операций, вы не должны использовать as AnyObject
в других случаях.
Ответ 2
Попробуйте использовать необязательную привязку с условным литьем, чтобы установить тип элемента перед сравнением:
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 {
// ...
}
}