将目标添加到按钮时,为什么目标动作必须是objc函数?

时间:2019-02-01 05:28:52

标签: ios swift

为什么按钮动作必须是用objc声明的函数?我对objc函数和func之间的区别以及为什么按钮不能简单地将其操作引用到func感到好奇。

编辑:我正在使用Swift。非常感谢您的宝贵时间。

var thisButton: UIButton = {
    let button = UIButton(type: .system)
    button.addTarget(self, action: #selector(thisFunction), for: .touchUpInside)
    return button
}()

@objc func thisFunction() {
    //stuff
}

1 个答案:

答案 0 :(得分:3)

  

Swift生成仅对其他Swift代码可用的代码,但是   如果您需要与Objective-C运行时进行交互–所有UIKit,   例如–您需要告诉Swift该怎么做。

     

这就是@objc属性的来源:将其应用于   类或方法,它指示Swift将这些内容提供给   Objective-C以及Swift代码。因此,只要您想致电   UIBarButtonItem或Timer中的方法,您需要将其标记为   使用@objc的方法,这样就可以将其公开-包括所有其他   是Objective-C代码。

引用:

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithObjective-CAPIs.html