以下代码过去可以在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!
// ...
}
}
发布于 2016-09-18 05:42:03
正如错误消息所说的那样。在Swift 3中,Objecitve-C id
被导入为Any
,如果没有显式强制转换,您将无法调用包括===
在内的任何Any
操作。
试试这个:
if sender as AnyObject? === saveButton {
(对于其他sender
比较都是一样的。)
请记住,在Swift 3中,as AnyObject
已成为风险最高的操作之一,您不应在其他情况下使用as AnyObject
。
发布于 2016-09-18 05:45:39
在比较之前,尝试使用带有条件强制转换的可选绑定来建立项的类型:
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 {
// ...
}
}
https://stackoverflow.com/questions/39551937
复制相似问题