あるメソッドの実行の前にそれ以外のメソッドを必ず実行したい場合にPhantom Typeを利用して実装することができます。例えばBuilderパターンでビルドを行う前に必ず値を設定するメソッドを実行しておきたいといった時です。 以下のコードではageとjobを設定しなければbuildメソッドが呼べません。 class BuilderState {} class Buildable: BuilderState {} class Unbuildable: BuilderState {} class UserBuilder<Age: BuilderState, Job: BuilderState> { fileprivate let age: UInt fileprivate let job: String fileprivate init(age: UInt, job: String) { s