二元运算符' ==='不能应用于任何类型的操作数?'和' UIBarButtonItem!'

时间:2016-09-17 21:31:05

标签: swift swift3

以下代码以前能够在swift 2.2中编译,不再在swift 3.0中编译。我们如何解决这个问题?

  

错误:二元运算符' ==='不能应用于任何类型的操作数?'和' UIBarButtonItem!'

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if sender === saveButton { // Error!
        // ... 
    } else if sender === closeButton { // Error!
        // ...
    }
}

2 个答案:

答案 0 :(得分:49)

正如错误消息所说。在Swift 3中,Objecitve-C id导入为Any,如果没有明确演员,您无法调用Any的任何操作,包括===

试试这个:

if sender as AnyObject? === saveButton {

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

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

答案 1 :(得分: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 {
        // ...
    }
}