以下代码以前能够在swift 2.2中编译,不再在swift 3.0中编译。我们如何解决这个问题?
错误:二元运算符' ==='不能应用于任何类型的操作数?'和' UIBarButtonItem!'
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if sender === saveButton { // Error!
// ...
} else if sender === closeButton { // Error!
// ...
}
}
答案 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 {
// ...
}
}