Transformação e Combinação de Fluxos
Use flatMap, merge, combineLatest e zip.
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.
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
- Transformação e Combinação de Fluxos
- Agendadores e Execução em Threads
- Operadores de Tratamento de Erros
- Publishers e Subscribers Personalizados