Swift Academy · Aula

Transformação e Combinação de Fluxos

Use flatMap, merge, combineLatest e zip.

Aula 1 de 413 etapas

Transformação e Combinação de Fluxos é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 1 de 4. 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 4 aulas no total.

Trabalhando com fluxos

No Combine, um publisher emite um fluxo de valores ao longo do tempo. O verdadeiro poder vem dos operadores que transformam e combinam esses fluxos em novos fluxos.

Esta lição aborda os operadores mais importantes de transformação e combinação: flatMap, merge, combineLatest e zip.

mapear versus flatMap

map transforma cada valor em outro valor. flatMap vai além — transforma cada valor em um novo publisher e achata os resultados em um único fluxo.

Use flatMap quando cada entrada deve disparar outra operação assíncrona.

flatMap em ação

Aqui, um fluxo de IDs de usuários é transformado em um fluxo de solicitações de rede, achatado em um único fluxo de usuários.

userIdPublisher
    .flatMap { id in
        apiClient.fetchUser(id: id)
    }
    .sink { user in
        print("Loaded", user.name)
    }
    .store(in: &cancellables)

Controlando a simultaneidade do flatMap

Por padrão, flatMap se inscreve em todos os publishers internos ao mesmo tempo. Você pode limitar a simultaneidade com maxPublishers para evitar sobrecarregar um servidor.

idsPublisher
    .flatMap(maxPublishers: .max(2)) { id in
        apiClient.fetchUser(id: id)
    }
    .sink { print($0) }
    .store(in: &cancellables)

merge

merge intercala valores de vários publishers do mesmo tipo em um único fluxo, emitindo cada valor assim que ele chega.

let combined = buttonTapA
    .merge(with: buttonTapB)

combined
    .sink { print("A tap from either button") }
    .store(in: &cancellables)

combineLatest

combineLatest emite sempre que qualquer publisher de entrada emitir, combinando o valor mais recente de cada um. Ele é perfeito para validação de formulários em que vários campos precisam ser considerados.

usernamePublisher
    .combineLatest(passwordPublisher)
    .map { name, pass in
        !name.isEmpty && pass.count >= 8
    }
    .sink { isValid in
        print("Form valid:", isValid)
    }
    .store(in: &cancellables)

Comportamento do combineLatest

Observação: combineLatest não emite nada até que toda entrada tenha produzido pelo menos um valor. Depois disso, cada nova emissão de qualquer entrada dispara a saída combinada com o valor mais recente das outras.

zip

zip combina valores por índice: o primeiro de A com o primeiro de B, o segundo com o segundo, e assim por diante. Ele espera que ambos os lados tenham um valor em cada posição.

let names = ["Ann", "Bob", "Cy"].publisher
let ages = [30, 25, 41].publisher

names
    .zip(ages)
    .sink { name, age in
        print(name, "is", age)
    }
    .store(in: &cancellables)

combineLatest versus zip

É fácil confundir os dois:

  • combineLatest — é disparado por qualquer emissão e usa o valor mais recente de cada um
  • zip — é disparado somente por pares correspondentes por índice

Use combineLatest para estados em tempo real; use zip para alinhar resultados paralelos um a um.

Combinando para trabalho paralelo

zip é ideal quando se executam solicitações independentes em paralelo e se espera por todas elas.

fetchProfile
    .zip(fetchSettings)
    .sink { profile, settings in
        print("Both loaded")
    }
    .store(in: &cancellables)

Encadeando operadores

Fluxos reais encadeiam vários operadores para expressar fluxos assíncronos complexos de forma declarativa.

searchTextPublisher
    .removeDuplicates()
    .flatMap { query in
        apiClient.search(query)
    }
    .map { results in
        results.prefix(10)
    }
    .sink { print($0) }
    .store(in: &cancellables)

Verificação rápida

Verifique seus conhecimentos sobre operadores.

Resumo

Você aprendeu a transformar e combinar fluxos:

  • flatMap — valor para publisher, depois achatado
  • merge — intercala fluxos do mesmo tipo
  • combineLatest — usa o valor mais recente de cada um e é disparado por qualquer emissão
  • zip — pares correspondentes por índice

Esses operadores permitem compor uma lógica assíncrona complexa de forma declarativa.

Grátis para começar

Aprenda Swift com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
122
Aulas
409

Perguntas Frequentes

A aula “Transformação e Combinação de Fluxos” é grátis?

Sim — o texto completo de “Transformação e Combinação de Fluxos” é 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 4 aulas no total.

O que vou aprender em “Transformação e Combinação de Fluxos”?

Use flatMap, merge, combineLatest e zip. 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 1 de 4.

Quanto tempo leva a aula “Transformação e Combinação de Fluxos”?

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. Transformação e Combinação de Fluxos
  2. Agendadores e Execução em Threads
  3. Operadores de Tratamento de Erros
  4. Publishers e Subscribers Personalizados
← Voltar para Swift Academy