ios - Swift 2.2 #selector for delegate/protocol compile error -
here code:
protocol customcontroldelegate: anyobject {     func buttontapped(sender: anyobject) }  class customcontrol: uiview {     var delegate: customcontroldelegate? {          didset {              abutton.addtarget(delegate, action: "buttontapped:"), forcontrolevents: uicontrolevents.touchupinside)     } } as of swift 2.2, compile error asking use #selector. can't figure out how correctly use #selector in case.
the compiler gave suggestion:
but when used, gave compile warning saying:
i tried , did not compile error, however, doubt it's right solution. don't want add @objc protocol:
@objc protocol customcontroldelegate: anyobject {     func buttontapped(sender: anyobject) }  class customcontrol: uiview {     var delegate: customcontroldelegate? {          didset {              abutton.addtarget(delegate, action: #selector(customcontroldelegate.buttontapped(_:)), forcontrolevents: uicontrolevents.touchupinside)     } } 
i don't see reason avoid @objc here. method must @objc in order objective-c runtime invoke it. can't put @objc method declaration, way convey intent make protocol @objc.
@objc protocol customcontroldelegate {     func buttontapped(sender: anyobject) } although protocol @objc, implementing class not need @objc — making method @objc can make compiler happy.
class mycontroldelegate: customcontroldelegate { // ^ no `@objc`, not deriving nsobject     @objc func buttontapped(sender: anyobject) {     // ^ making method `@objc` enough.      } } then use #selector(customcontroldelegate.buttontapped) without errors or warnings.


Comments
Post a Comment