二进制运算符'==='不能应用于'Any?'类型的操作数 和'UIBarButtonItem!'

Yuc*_*ong 27 swift swift3

以下代码以前能够在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!
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

OOP*_*Per 49

正如错误消息所说.在斯威夫特3,Objecitve-C id导入为Any,你不能调用任何操作的Any,包括===,没有明确的强制转换.

试试这个:

if sender as AnyObject? === saveButton {
Run Code Online (Sandbox Code Playgroud)

(其他sender比较都是一样的.)

请记住,在Swift 3中,as AnyObject已经成为风险最大的操作之一,as AnyObject在其他情况下不应该使用.


vac*_*ama 13

在比较之前,尝试使用带条件转换的可选绑定来建立项目的类型:

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 {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)