O Builder Pattern separa a construção de um objeto complexo da sua representação. Em Swift, é ideal quando um objeto tem muitos parâmetros opcionais e precisa de validação no momento da criação.

Por que Builder Pattern?

ProblemaSolução com Builder
Muitos parâmetros opcionais no initMétodos encadeáveis — chame apenas o que precisa
Validação espalhada pelo códigoValidação centralizada no build()
Objeto precisa ser imutável após criaçãoBuilder é mutável, resultado é let
Configuração complexa com dependências entre paramsBuilder pode validar combinações no build()
API pouco legível com muitos argumentosFluent interface com nomes descritivos

Anatomia do Builder em Swift

ComponentePapelExemplo
ProductObjeto imutável finalIdentityKitConfiguration
BuilderClasse mutável com settersIdentityKitConfiguration.Builder
@discardableResultPermite encadear sem warning@discardableResult func setAPIKey(...) -> Self
build()Valida e cria o produtofunc build() throws -> Configuration
Por que o Builder é class e não struct?
O Builder precisa ser class para que self retornado nos setters seja a mesma instância (reference type). Com struct (value type), cada setter retornaria uma cópia, e o encadeamento não funcionaria corretamente sem mutating + variável var. Class permite Builder().setA().setB().build() naturalmente.