Kapil
Kapil

Reputation: 143

Swift overriding extension method

I am looking a way to override base class extension method in subclass. As per my knowledge swift doesn't allow to do this directly. This method is protocol method. Is there any way to achieve this?

protocol Creator {
    func create()
}
class BaseClass {

}

extension BaseClass: Creator {

    func create() {
        print("create")
    }
}

class Subclass1: BaseClass {
    // override create method
    // add own implementation of create()
}

class Subclass2 : BaseClass {
    // override create method
    // add own implementation of create()
}

let subclass1 = Subclass1().create() // execute create from Subclass1
let subclass2 = Subclass2().create() // execute create from Subclass2

Upvotes: 2

Views: 1912

Answers (1)

matt
matt

Reputation: 535222

Just move the declaration of create into the actual class declaration. Everything else can stay the same:

protocol Creator {
    func create()
}
class BaseClass {
    func create() {
        print("create")
    }
}
extension BaseClass: Creator {
}
// and so on

The effect is precisely the same, but now override func create() is legal in your subclasses.

Upvotes: 4

Related Questions