iOS

    How does one declare optional methods in a Swift protocol?


    As in most cases with Swift, you can’t actually declare optional methods in a protocol. However, the behaviors, which are optional in this case, can be implemented using protocol extensions in conjunction with default implementations. 

    Here's how you can do it

    Using Extensions:

    1. Define a Protocol: You just have to create your protocol with the methods you want.

    2. Use Protocol Extensions: The default implementation of all the methods in a protocol extension. By doing so, conforming types can decide to provide their own implementations if they wish to do so.

    Here’s an example:

     

    protocol MyProtocol {  func requiredMethod()  func optionalMethod() // This method will not be optional yet }  extension MyProtocol {  func optionalMethod() {  // Default implementation  print("Default optional method implementation")  } } class MyClass: MyProtocol {  func requiredMethod() {  print("Required method implementation")  }   // Uncommenting this will override the default optional method  // func optionalMethod() {  // print("Custom optional method implementation")  // } } let myClassInstance = MyClass() myClassInstance.requiredMethod() // Output: Required method implementation myClassInstance.optionalMethod() // Output: Default optional method implementation

     

     

     

    Using Objective-C methods:

    If you require optional methods, similar to those in Objective-C protocols, you can use @objc which shows your Swift protocol is compatible with Objective-C, and then declare methods as optional by using the @objc optional keyword. However, this means that for these new types, they have to be a subclass of NSObject. 

    Here’s how it looks:

     

     

    @objc protocol MyObjectiveCProtocol { func requiredMethod()  @objc optional func optionalMethod() // Optional method }  class MyObjCClass: NSObject, MyObjectiveCProtocol {  func requiredMethod() {  print("Required method implementation")  }  // optionalMethod can be implemented or omitted }  let myObjCInstance = MyObjCClass() myObjCInstance.requiredMethod() // Output: Required method implementation myObjCInstance.optionalMethod?() // Safe call; may or may not execute

     

    Conclusion

    When it comes to pure Swift protocols, all default implementations should be placed in extensions. In order to make methods optional for Objective-C compatibility use the @optional keyword.

     

    Ready to transform your business with our technology solutions?     Contact Us today to Leverage Our iOS Expertise.

    Contact Us

    Comment

    Share

    facebook
    LinkedIn
    Twitter
    Mail
    iOS

    Related Center Of Excellence