class Base { ... var switcher: Switcher { fatalError("abstract") } enum Switcher { case foo(Foo) case bar(Bar) case baz(Baz) } } class Foo: Base { ... override var switcher: Base.Switcher { return .foo(self) } } ...