I have a protocol
with some optional
functions. My goal is to check if a delegate function is implemented by the delegate object, if yes execute it, otherwise do some default stuff.
I am using respondsToSelector
for this purpose, it works fine for functions that with none or only one parameters, but doesn't work for two parameters.
Could anyone help? Thanks in advance.
Note that all the functions have been implemented by the delegate object, here is my code:
@objc protocol ViewControllerDelegate: NSObjectProtocol {
optional func doSomethingWithoutParams()
optional func doSomethingWithOneParam(controller: ViewController)
optional func doSomethingWithTwoParams(controller: ViewController, secondParam: String)
}
class ViewController: UIViewController {
weak var delegate: ViewControllerDelegate?
@IBAction func onButtonClicked(sender: AnyObject){
if (delegate != nil && delegate!.respondsToSelector(Selector("doSomethingWithoutParams"))) {
// Entered here
}
else{
NSLog("doSomethingWithoutParams is not implemented")
}
if (delegate != nil && delegate!.respondsToSelector(Selector("doSomethingWithOneParam:"))) {
// Entered here
}
else{
NSLog("doSomethingWithOneParam is not implemented")
}
if (delegate != nil && delegate!.respondsToSelector(Selector("doSomethingWithTwoParams::"))) {
NSLog("doSomethingWithTwoParams is implemented")
}
else{
// Entered here
NSLog("doSomethingWithTwoParams is not implemented")
}
}
}