0Pricing
Swift Academy · Aula

Quando usar existenciais (any P) versus genéricos

Escolha entre any P (tipos existenciais) e generics : armazenamento heterogêneo e comportamento dinâmico versus especialização em tempo de compilação e garantias estáticas.

Quando usar existenciais (any P) versus genéricos é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 3 de 3. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Swift Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Swift Academy inclui 3 aulas no total.

Existenciais versus genéricos

Existenciais (any P) armazenam valores de tipo concreto desconhecido que estão em conformidade com um protocolo. Os genéricos (<T: P>) mantêm o tipo concreto em tempo de compilação para especialização.

Configuração do protocolo

Protocolos sem tipos associados são fáceis de usar como existenciais any P e como restrições genéricas.

protocol Animal {
    func speak() -> String
}
struct Dog: Animal { func speak() -> String { "woof" } }
struct Cat: Animal { func speak() -> String { "meow" } }

Matrizes heterogêneas

Use [any Animal] para armazenar diferentes tipos conformes em conjunto e chamar apenas a API do protocolo.

let zoo: [any Animal] = [Dog(), Cat()]   // heterogeneous array
for a in zoo { print(a.speak()) }              // "woof", "meow"

Especialização por meio de genéricos

Os genéricos preservam o tipo concreto (T), permitindo mais otimizações e verificações mais rigorosas em tempo de compilação.

// Generic version — compiler specializes for each concrete type
func shout<T: Animal>(_ a: T) {
    // Can inline/specialize based on concrete T
    print(a.speak().uppercased())
}
shout(Dog()) // WOOF
shout(Cat()) // MEOW

Limitações dos PATs

Protocolos com tipos associados não funcionam bem como existenciais simples quando você precisa do tipo associado. Prefira genéricos ou o apagamento de tipos (por exemplo, AnySequence).

protocol Container {
    associatedtype Item
    func get(_ i: Int) -> Item
}
// Storing as `any Container` loses the concrete Item.
// You can't use Item directly without additional constraints or type erasure.

Quando escolher cada opção

Escolha:

  • any P quando precisar de armazenamento heterogêneo ou de comportamento dinâmico usando apenas a API do protocolo.
  • Genéricos quando quiser tipos estáticos, melhor otimização ou precisar relacionar vários tipos (por exemplo, o mesmo item).
  • Para PATs em que o item é importante, use genéricos ou adicione apagamento de tipos.

any P versus genéricos

Verificação rápida: quando any P é preferível?

Recapitulação

Recapitulação: use any P para tipos conformes mistos e comportamento dinâmico; use genéricos para especialização em tempo de compilação e quando os tipos associados ou os relacionamentos forem importantes.

Perguntas Frequentes

A aula “Quando usar existenciais (any P) versus genéricos” é grátis?

Sim — o texto completo de “Quando usar existenciais (any P) versus genéricos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Swift Academy, atualize para CoddyKit PRO. O curso de Swift Academy inclui 3 aulas no total.

O que vou aprender em “Quando usar existenciais (any P) versus genéricos”?

Escolha entre any P (tipos existenciais) e generics : armazenamento heterogêneo e comportamento dinâmico versus especialização em tempo de compilação e garantias estáticas. Você pratica Swift Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Swift Academy?

Nenhuma experiência prévia é necessária. Swift Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 3.

Quanto tempo leva a aula “Quando usar existenciais (any P) versus genéricos”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Swift Academy?

Sim. Cada aula de Swift Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. associatedtype e protocolos genéricos
  2. Padrões de apagamento de tipos (AnySequence/AnyIterator)
  3. Quando usar existenciais (any P) versus genéricos
← Voltar para Swift Academy