1.selector调用的方法前需要加@objc,目的是允许函数在“运行时”通过oc消息机制调用
overridefuncviewDidLoad(){super.viewDidLoad()letbtn=UIButton(type:.contactAdd)btn.addTarget(self,action:#selector(click),for:.touchUpInside)}@objcfuncclick(){print("Button clicked")}
2.协议的方法可选时,协议和可选方法前要用@objc声明
@objcprotocolOptionalProtocol{@objcoptionalfuncoptionalMethold1()@objcoptionalfuncoptionalMethold2()}
3.用weak修饰协议时,协议前面要用@objc声明
@objcprotocolMyDelegate{funcmethold1()}classMyClass{weakvardelegate:MyDelegate?}
4.类前加上 @objcMembers,那么它及其子类、扩展里的方法都会隐式的加上 @objc
@objcMembersclassPerson{}
5.扩展前加上 @objc,那么里面的方法都会隐式加上 @objc
classPerson{funcwork(){}}@objcextensionPerson{funceat(){}//包含隐式的 @objcfuncsleep(){}//包含隐式的 @objc}
网友评论