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

Двоичный оператор '===' не может применяться к операндам типа "Любой"? и '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!
        // ...
    }
}
4b9b3361

Ответ 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 {
        // ...
    }
}