0Pricing
Swift Academy · Aula

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

  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