以下代码以前能够在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)
归档时间: |
|
查看次数: |
29060 次 |
最近记录: |