Xcode 8 拖动并连接 @IBAction 错误地在连接检查器 IB 上添加 "WithSender"
Xcode 8 drag and connect @IBAction incorrectly adds "WithSender" on connection inspector IB
Xcode 8 拖动并连接 @IBAction 错误地在连接检查器 IB
上添加了 "WithSender"
因此我必须将这些方法重命名为
@IBAction func tappedConfirmButtonWithSender(sender: AnyObject) {}
不应该吗?:
@IBAction func tappedConfirmButton(sender: AnyObject) {}
这是我的错还是错误?
我也刚打了这个。它似乎是遗留 Swift 2.3 代码的错误,因为有一点 Swift 3 泄漏。我找到了关键答案 in the dev forums,加上我和我的同事的一些额外发现.
解决方法: 将参数 (sender: AnyObject)
更改为 (_ sender: AnyObject)
。您会在修改后的行上收到一条警告,您可以放心地忽略它。
[已更新 - 另一个解决方法: Apple 回应了我的错误报告并建议了一个不同的解决方法:用 @objc
注释 @IBAction
方法。我还没有确认这是否有效。]
发生了什么事: Xcode 8 个故事板中似乎存在错误。我的解释是它错误地将 Swift 2 @IBAction 方法解析为 Swift 3,然后尝试将它们转换回 Swift 2.
让我们详细了解一下!在 Swift 3 中,与 Swift 2 不同,给定一个方法声明为:
@IBAction func foo(sender: AnyObject)
sender
参数标签实际上是方法名称的一部分,并包含在对该方法的调用中。在 Swift2 中,当然,第一个参数默认没有标签。在 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 称。)
[反复编辑并更改变通办法。]
我终于找到了我遇到的问题的主题。我开始怀疑自己了
我会为有兴趣的人提出另一种解决方法。
右键单击打开故事板 -> 打开为 -> 源代码。
在 xml 文件中找到您的方法并删除 WithSender 附加项以使您的方法名称与 class 中的方法名称相匹配。
这样您就可以按照自己的方式命名方法。
就是这样...
我在使用 Xcode 8 时遇到了同样的问题。It may be bug.
以下是解决此问题的方法:
Delete the outlet connection
来自 IB 文件
创建一个 new outlet
按 Ctrl 并拖动。这将打开一个弹出窗口,如下所示。
Select 连接为 Action
并输入 name of action
。然后 select Type
.
- 按
Connect
。这将在您的 Swift 文件中创建新的 IBAction。
虽然IBAction的圈可能没有被填满,但它是相连的。
您可以尝试修改如下:
@IBAction func tappedConfirmButton(_ sender: AnyObject)
{
}
祝你好运!
Xcode 8 拖动并连接 @IBAction 错误地在连接检查器 IB
上添加了 "WithSender"因此我必须将这些方法重命名为
@IBAction func tappedConfirmButtonWithSender(sender: AnyObject) {}
不应该吗?:
@IBAction func tappedConfirmButton(sender: AnyObject) {}
这是我的错还是错误?
我也刚打了这个。它似乎是遗留 Swift 2.3 代码的错误,因为有一点 Swift 3 泄漏。我找到了关键答案 in the dev forums,加上我和我的同事的一些额外发现.
解决方法: 将参数 (sender: AnyObject)
更改为 (_ sender: AnyObject)
。您会在修改后的行上收到一条警告,您可以放心地忽略它。
[已更新 - 另一个解决方法: Apple 回应了我的错误报告并建议了一个不同的解决方法:用 @objc
注释 @IBAction
方法。我还没有确认这是否有效。]
发生了什么事: Xcode 8 个故事板中似乎存在错误。我的解释是它错误地将 Swift 2 @IBAction 方法解析为 Swift 3,然后尝试将它们转换回 Swift 2.
让我们详细了解一下!在 Swift 3 中,与 Swift 2 不同,给定一个方法声明为:
@IBAction func foo(sender: AnyObject)
sender
参数标签实际上是方法名称的一部分,并包含在对该方法的调用中。在 Swift2 中,当然,第一个参数默认没有标签。在 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 称。)
[反复编辑并更改变通办法。]
我终于找到了我遇到的问题的主题。我开始怀疑自己了
我会为有兴趣的人提出另一种解决方法。
右键单击打开故事板 -> 打开为 -> 源代码。
在 xml 文件中找到您的方法并删除 WithSender 附加项以使您的方法名称与 class 中的方法名称相匹配。
这样您就可以按照自己的方式命名方法。
就是这样...
我在使用 Xcode 8 时遇到了同样的问题。It may be bug.
以下是解决此问题的方法:
Delete the outlet connection
来自 IB 文件创建一个
new outlet
按 Ctrl 并拖动。这将打开一个弹出窗口,如下所示。
Select 连接为 Action
并输入 name of action
。然后 select Type
.
- 按
Connect
。这将在您的 Swift 文件中创建新的 IBAction。 虽然IBAction的圈可能没有被填满,但它是相连的。
您可以尝试修改如下:
@IBAction func tappedConfirmButton(_ sender: AnyObject)
{
}
祝你好运!