Padrões de apagamento de tipos (AnySequence/AnyIterator)
Use AnySequence e AnyIterator para apagar tipos concretos de sequência/iterador, permitindo que as APIs retornem “uma sequência de T” sem expor a implementação.
Padrões de apagamento de tipos (AnySequence/AnyIterator) é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 2 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.
Por que apagar tipos?
O apagamento de tipos oculta tipos concretos por trás de um invólucro estável. Com AnySequence e AnyIterator, você pode retornar “uma sequência de elementos” sem expor a estrutura interna.
A limitação
Uma sequência tem um tipo associado (elemento), portanto o protocolo sem especialização não pode ser usado como um tipo concreto de valor. Precisamos de um invólucro.
// Goal: return "some Sequence<Int>"
// This won't compile as a stored value type:
// let s: Sequence = [1,2,3] // Protocol with associated types
// Instead, erase the type to AnySequence<Int>.Invólucro AnySequence
AnySequence envolve qualquer sequência concreta (vetor, conjunto ou sequência personalizada) e expõe um tipo uniforme, como AnySequence<Int>.
// Build an AnySequence<Int> from an Array
let a = [1, 2, 3]
let seq1: AnySequence<Int> = AnySequence(a)
// Consume like any sequence
for x in seq1 { print(x, terminator: " ") }
print("")Invólucro AnyIterator
AnyIterator envolve um fechamento que produz elementos. Envolva-o em AnySequence para expor uma sequência completa.
// Create an AnyIterator<Int> by hand
var i = 0
let it = AnyIterator<Int> {
// Return next number or nil to stop
guard i < 3 else { return nil }
defer { i += 1 }
return i
}
let seq2 = AnySequence(it)
for x in seq2 { print(x, terminator: " ") } // 0 1 2
print("")Tipo de retorno uniforme
O apagamento de tipos permite que uma função retorne implementações diferentes sob um único tipo de retorno estável, como AnySequence<Int>.
// Return a sequence of Int without exposing concrete type
func numbers(flag: Bool) -> AnySequence<Int> {
if flag {
// Array-based
return AnySequence([10, 20, 30])
} else {
// Lazy generated with AnyIterator
var n = 1
let it = AnyIterator<Int> {
guard n <= 3 else { return nil }
defer { n += 1 }
return n * 100
}
return AnySequence(it)
}
}
for x in numbers(flag: true) { print(x, terminator: " ") } // 10 20 30
print("")
for x in numbers(flag: false) { print(x, terminator: " ") } // 100 200 300
print("")Quando usá-lo
Use o apagamento de tipos quando:
- Quiser ocultar detalhes de implementação de sequências/iteradores.
- As APIs precisarem retornar o mesmo tipo, independentemente dos ramos internos.
- Os genéricos ficarem expostos demais nos limites da API.
Observações: prefira genéricos por desempenho e clareza dentro dos módulos; use AnySequence/AnyIterator nos limites quando necessário.
Finalidade de AnySequence
Verificação rápida: o que AnySequence<T> oferece a você?
Recapitulação
Recapitulação: envolva sequências/iteradores concretos com AnySequence / AnyIterator para apagar os tipos e retornar “uma sequência de T” por meio de APIs flexíveis.
Perguntas Frequentes
A aula “Padrões de apagamento de tipos (AnySequence/AnyIterator)” é grátis?
Sim — o texto completo de “Padrões de apagamento de tipos (AnySequence/AnyIterator)” é 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 “Padrões de apagamento de tipos (AnySequence/AnyIterator)”?
Use AnySequence e AnyIterator para apagar tipos concretos de sequência/iterador, permitindo que as APIs retornem “uma sequência de T” sem expor a implementação. 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 2 de 3.
Quanto tempo leva a aula “Padrões de apagamento de tipos (AnySequence/AnyIterator)”?
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
- associatedtype e protocolos genéricos
- Padrões de apagamento de tipos (AnySequence/AnyIterator)
- Quando usar existenciais (any P) versus genéricos