gpt4 book ai didi

ios - Swift 希望将#selector 的参数暴露给 Objective-C

转载 作者:IT王子 更新时间:2023-10-29 05:07:07 25 4
gpt4 key购买 nike

我有一个 Swift 项目,我想在其中将一个方法附加到 UIButton 的点击事件。我有以下代码:

class MyClass {
let myButton = UIButton(frame: CGRectMake(50, 50, 100, 50))
init() {
myButton.addTarget(self, #selector(self.didTap(_:)), forControlEvents: .TouchUpInside)
}

func didTap(sender: UIButton) {
print("Tapped")
}
}

XCode 突出显示我的 addTarget 行并说:

Argument of '#selector' refers to a method that is not exposed to Objective-C

如果我将 @objc 前缀添加到我的 func didTap 中,就像它建议的那样,那么一切正常。

我的build设置中是否启用了某些导致这种奇怪行为的东西?

附言。我在 7.3.1 中得到了这种行为。但是,如果我在 7.2.1 中尝试这样做,它不接受 #selector(method(_:)) 语法,并且 Selector("method:") 工作正常.

最佳答案

选择器是 Objective-C 的一个特性,只能与公开给动态 Obj-C 运行时的方法一起使用。您不能为纯 Swift 方法设置选择器。

如果您的类继承自 NSObject,那么它的公共(public)方法会自动暴露给 Obj-C。由于您的类没有继承自 NSObject,您必须使用 @objc 属性来指示您希望将此方法公开给 Obj-C,以便可以使用Obj-C 选择器。

#selector() 是 Swift 2.2 中的新语法。它允许编译器检查您尝试使用的选择器是否确实存在。旧语法已弃用,并将在 Swift 3.0 中删除。

关于ios - Swift 希望将#selector 的参数暴露给 Objective-C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36962854/

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