Inferência em Closures
Entenda a inferência de parâmetros e retornos em closures.
Inferência em Closures é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 4 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.
Fechamentos inferem tipos
Em muitos contextos, um fechamento pode inferir os tipos de seus parâmetros e do retorno a partir da forma como é usado.
let numbers = [1, 2, 3, 4]
let doubled = numbers.map { $0 * 2 }
print(doubled)Tipo do parâmetro inferido
Quando passa um fechamento para map, o tipo do elemento informa a Swift o que é $0, portanto você pode omitir o tipo do parâmetro.
let names = ["ada", "bob"]
let upper = names.map { $0.uppercased() }
print(upper)Tipo de retorno inferido
O corpo do fechamento determina seu tipo de retorno. Retornar um Bool transforma o fechamento em um predicado.
let nums = [1, 2, 3, 4, 5]
let evens = nums.filter { $0 % 2 == 0 }
print(evens)Nomes abreviados dos argumentos
$0, $1 e assim por diante referem-se aos argumentos do fechamento pela posição quando seus tipos são inferidos.
let sums = zip([1, 2, 3], [10, 20, 30]).map { $0 + $1 }
print(Array(sums))Parâmetros explícitos quando necessário
Ainda é possível nomear os parâmetros e anotar os tipos se isso melhorar a clareza.
let nums = [3, 1, 2]
let sorted = nums.sorted { (a: Int, b: Int) -> Bool in
return a < b
}
print(sorted)Inferência a partir do contexto
Se atribuir um fechamento a uma variável com tipo definido, o tipo da variável informa ao fechamento qual é a sua assinatura.
let add: (Int, Int) -> Int = { a, b in a + b }
print(add(2, 3))Fechamento final
A sintaxe de fechamento final mantém a inferência funcionando e, ao mesmo tempo, torna os locais de chamada mais legíveis.
let result = [5, 3, 8, 1].sorted { $0 > $1 }
print(result)Inferido em reduce
Em reduce, os tipos do acumulador e do elemento são inferidos a partir do valor inicial e da sequência.
let total = [1, 2, 3, 4].reduce(0) { acc, x in acc + x }
print(total)Retornando de um fechamento
Fechamentos de expressão única podem omitir a palavra-chave return; o valor da expressão é retornado e seu tipo é inferido.
let lengths = ["hi", "hello", "hey"].map { $0.count }
print(lengths)Variável de fechamento com tipo anotado
Quando armazena um fechamento sem uma chamada imediata, anote o tipo do fechamento para que Swift possa inferir o corpo.
let transform: (String) -> Int = { $0.count }
print(transform("swift"))Quando é necessário anotar
Se o contexto ao redor não fornecer informações de tipo, Swift não poderá inferir os parâmetros do fechamento e será necessário anotá-los.
let isPositive: (Int) -> Bool = { n in n > 0 }
print(isPositive(5), isPositive(-3))Verificação rápida
Teste a inferência de fechamentos.
Recapitulação
Os fechamentos inferem os tipos dos parâmetros e do retorno a partir de contextos como map, filter ou uma variável com tipo definido. Use as formas abreviadas $0/$1 quando os tipos forem inferidos e faça anotações explícitas quando não houver contexto disponível.
let f: (Int) -> Int = { $0 + 1 }
let xs = [1, 2, 3].map { $0 * 10 }
print(f(9), xs)Perguntas Frequentes
A aula “Inferência em Closures” é grátis?
Sim — o texto completo de “Inferência em Closures” é 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 “Inferência em Closures”?
Entenda a inferência de parâmetros e retornos em closures. 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 4 de 4.
Quanto tempo leva a aula “Inferência em Closures”?
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
- Como Funciona a Inferência de Tipos
- Quando Adicionar Anotações Explícitas
- Inferência com Literais
- Inferência em Closures