Xcode 8拖动并连接@IBAction错误地在连接检查器IB上添加"WithSender"
因此,我必须将方法重命名为类似的方法
@IBAction func tappedConfirmButtonWithSender(sender:AnyObject){}
不应该吗?:
@IBAction func tappedConfirmButton(sender:AnyObject){}
这是我的错还是这个错误?
rob*_*pie 31
我也打过这个.它似乎是传统Swift 2.3代码的一个错误,因为Swift 3泄漏了一些.我在开发论坛找到了关键答案,还有我和我的同事的一些额外发现.
解决方法:将参数更改(sender: AnyObject)为(_ sender: AnyObject).您将在修改后的行上收到警告,您可以放心地忽略它.
[ 更新 - 另一种解决方法: Apple回应了我的错误报告并提出了一个不同的解决方法:使用注释@IBAction方法@objc.我还没有确认这是有效的.]
发生了什么:看起来Xcode 8故事板中有一个错误.我的解释是它错误地解析了Swift 2 @IBAction方法,好像它们是Swift 3,然后尝试将它们转换回Swift 2.
我们来详细一点!在Swift 3中,与Swift 2不同,给定一个声明为:
@IBAction func foo(sender: AnyObject)
Run Code Online (Sandbox Code Playgroud)
在sender参数标签实际上是方法名称的一部分,被包含在调用该方法.当然,在Swift 2中,第一个参数默认不会获得标签.在Swift 2中,你会打电话foo(myButton); 在Swift 3中,你打电话foo(sender: myButton).
Xcode 8错误地读取了Swift 3方式的这个功能.并且API重命名的模式是Swift 2的方法名称doSomethingWithParam(quuz)被重写为Swift 3 doSomething(param: quuz).Xcode假设这是发生在这里的事情,因此在误导性地尝试派生原始的Swift 2名称时,它会添加WithSender回方法名称的末尾.下划线解决方法的工作原理是使Swift 3方法签名与Swift 2签名相同.(@objc据Apple称,我不知道为什么注释也解决了这个问题.)
[反复修改变通办法.]
| 归档时间: |
|
| 查看次数: |
4726 次 |
| 最近记录: |