Articles, podcasts and news about Swift development, by John Sundell.

The ‘final’ keyword

Published on 19 Mar 2019

Swift's final keyword is not only useful in order to prevent a class from being subclassed entirely, it can also let us mark individual methods as non-overridable — which is useful when relying on subclassing, and we still want to protect certain methods from being modified:

// A class that isn't 'final' can be subclassed within its own
// module (outside of the module, only if it's marked as 'open').
class Actor {
    func willMove(to scene: Scene) {
        ...
    }

    func didMove(to scene: Scene) {
        ...
    }

    // However, individual functions can still be marked as
    // 'final' to prevent overrides.
    final func remove() {
        ...
    }
}

extension Actor {
    // Methods defined in extensions can't be overriden either,
    // at least not yet.
    func add(to scene: Scene) {
        ...
    }
}

class Player: Actor {
    // This is especially useful when setting up a hierarchy
    // of classes that derive from a parent class, and we only
    // want to enable specific overrides.
    override func willMove(to scene: Scene) {
        super.willMove(to: scene)
        ...
    }
}

Support Swift by Sundell by checking out this sponsor:

Raycast

Raycast: Take the macOS Spotlight experience to the next level: Create Jira issues, manage GitHub pull requests and control other tools with a few keystrokes. Easily automate every-day tasks and boost your developer productivity by downloading Raycast for free.