二进制运算符'==='不能应用于类型为'Any?'的操作数和"UIBarButtonItem!" [英] Binary operator '===' cannot be applied to operands of type 'Any?' and 'UIBarButtonItem!'
问题描述
以下代码曾经能够在swift 2.2中进行编译,而不再能够在swift 3.0中进行编译.我们该如何解决?
The following code used to be able to compile in swift 2.2, no longer in swift 3.0. How do we fix this?
错误:二进制运算符'==='不能应用于类型为'Any?'的操作数和"UIBarButtonItem!"
Error: Binary operator '===' cannot be applied to operands of type 'Any?' and 'UIBarButtonItem!'
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if sender === saveButton { // Error!
// ...
} else if sender === closeButton { // Error!
// ...
}
}
推荐答案
错误消息所言.在Swift 3中,Objecitve-C id
被导入为Any
,并且如果没有显式强制转换,则不能调用Any
的任何操作,包括===
.
As the error message is saying. In Swift 3, Objecitve-C id
is imported as Any
, and you cannot call any operations for Any
including ===
, without explicit cast.
尝试一下:
if sender as AnyObject? === saveButton {
(其他sender
比较均相同.)
请记住,在Swift 3中,as AnyObject
已成为风险最高的操作之一,在其他情况下,请勿使用as AnyObject
.
And remember, in Swift 3, as AnyObject
has become one of the most risky operations, you should not use as AnyObject
in other cases.
这篇关于二进制运算符'==='不能应用于类型为'Any?'的操作数和"UIBarButtonItem!"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!