Swift - class method which must be overridden by subclass Swift - class method which must be overridden by subclass swift swift

Swift - class method which must be overridden by subclass


You have two options:

1. Use a Protocol

Define the superclass as a Protocol instead of a Class

Pro: Compile time check for if each "subclass" (not an actual subclass) implements the required method(s)

Con: The "superclass" (protocol) cannot implement methods or properties

2. Assert in the super version of the method

Example:

class SuperClass {    func someFunc() {        fatalError("Must Override")    }}class Subclass : SuperClass {    override func someFunc() {    }}

Pro: Can implement methods and properties in superclass

Con: No compile time check


The following allows to inherit from a class and also to have the protocol's compile time check :)

protocol ViewControllerProtocol {    func setupViews()    func setupConstraints()}typealias ViewController = ViewControllerClass & ViewControllerProtocolclass ViewControllerClass : UIViewController {    override func viewDidLoad() {        self.setup()    }    func setup() {        guard let controller = self as? ViewController else {            return        }        controller.setupViews()        controller.setupConstraints()    }    //.... and implement methods related to UIViewController at will}class SubClass : ViewController {    //-- in case these aren't here... an error will be presented    func setupViews() { ... }    func setupConstraints() { ... }}


There isn't any support for abstract class/ virtual functions, but you could probably use a protocol for most cases:

protocol SomeProtocol {    func someMethod()}class SomeClass: SomeProtocol {    func someMethod() {}}

If SomeClass doesn't implement someMethod, you'll get this compile time error:

error: type 'SomeClass' does not conform to protocol 'SomeProtocol'