gpt4 book ai didi

xcode8 - Xcode 8 拖动并连接 @IBAction 错误地在连接检查器 IB 上添加了 "WithSender"

转载 作者:行者123 更新时间:2023-12-03 15:18:55 25 4
gpt4 key购买 nike

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 回复了我的错误报告并提出了不同的解决方法:注释 @IBAction使用 @objc 的方法.我还没有确认这是否有效。]

怎么回事:看起来 Xcode 8 Storyboard中有一个错误。我的解释是它错误地将 Swift 2 @IBAction 方法解析为 Swift 3,然后尝试将它们转换回 Swift 2。

来详细点吧!在 Swift 3 中,与 Swift 2 不同,给定一个声明为的方法:

@IBAction func foo(sender: AnyObject)
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 方法签名相同来工作。 (根据 Apple 的说法,我不知道为什么 @objc 注释也解决了这个问题。)

[通过更改变通方法反复编辑。]

关于xcode8 - Xcode 8 拖动并连接 @IBAction 错误地在连接检查器 IB 上添加了 "WithSender",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39646599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com