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喜欢它建议,一切都可以正常。
我的构建设置中是否启用了某些功能,导致这种奇怪的行为?
PS。我在7.3.1中得到这个行为。但是如果我在7.2.1中尝试这样做,它不接受#selector(method(_ :))语法,而Selector(“method:”)可以正常工作。
解决方法 选择器是Objective-C的一个特性,只能用于暴露于动态Obj-C运行时的方法。您不能使用纯Swift方法的选择器。如果你的类继承自NSObject,那么它的公共方法会自动暴露给Obj-C。由于您的类不继承NSObject,您必须使用@objc属性来表示您希望将此方法暴露于Obj-C,以便可以使用Obj-C选择器调用该方法。
#selector()是Swift 2.2中的新语法。它允许编译器检查您尝试使用的选择器实际上是否存在。旧的语法已弃用,将在Swift 3.0中删除。
总结以上是内存溢出为你收集整理的ios – Swift想要将#selector的参数暴露给Objective-C全部内容,希望文章能够帮你解决ios – Swift想要将#selector的参数暴露给Objective-C所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)