Optional protocol methods in Swift

In Swift it’s kind of unsupported to implemented optional protocol methods.

You can, which is ugly, use the @objc syntax:

@objc protocol MyProtocol {
    optional func doSomething();

class MyClass : MyProtocol {
    // no error

Another disadvantage here is that structs are unsupported, as you’re bridging for Objc.

Using protocol extensions to create optional protocol methods

However, with Swift 2.0 it’s possible to define protocol extension. This allows you to create optional methods for your protocol easily:

protocol MyProtocol {
    func doSomethingNonOptionalMethod()
    func doSomethingOptionalMethod()

extension MyProtocol {
    func doSomethingOptionalMethod(){ 
        // leaving this empty 

As stated in this thread, many people are asking this feature:

All posts in this category


Antoine van der Lee

Dutch iOS developer at Triple. Developed apps like Buienradar, Videoland and Pop the Dots.

Follow on Feedly