Restrições (where) e inferência de tipos
Restrinja código genérico usando where (por exemplo, restrições Equatable/Comparable ou Element) e veja como o Swift infere tipos genéricos nos locais de chamada.
Restrições (where) e inferência de tipos é 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 usar restrições?
Adicione restrições para que o código genérico possa usar determinadas operações, como == ou <. A inferência de tipos do Swift então escolhe tipos concretos nas chamadas.
Restrição de igualdade
Uma restrição de igualdade permite fazer verificações de igualdade. Sem ela, == não fica disponível para qualquer tipo genérico.
// Find the first index of value in an array of T
func indexOf<T>(_ value: T, in array: [T]) -> Int? where T: Equatable {
for (i, x) in array.enumerated() {
if x == value { return i } // allowed because T: Equatable
}
return nil
}
print(indexOf(3, in: [1,2,3,2]) ?? -1) // 2
print(indexOf("b", in: ["a","b","c"]) ?? -1) // 1Restrição de ordenação
Uma restrição de comparabilidade permite operações de ordenação, como <.
// Return the minimum value of a collection when elements are Comparable
func minimum<T: Comparable>(_ xs: [T]) -> T? {
guard var best = xs.first else { return nil }
for x in xs.dropFirst() {
if x < best { best = x }
}
return best
}
print(minimum([7,3,9]) ?? -1) // 3
print(minimum(["b","a","c"]) ?? "?") // "a"Extensão com condição
Use uma condição sobre o tipo de elemento para adicionar APIs somente a determinados tipos de elementos, como matrizes de elementos comparáveis por igualdade.
// Add a helper only when the array's Element is Equatable
extension Array where Element: Equatable {
func removingDuplicates() -> [Element] {
var seen: [Element] = []
for x in self {
if !seen.contains(x) { seen.append(x) }
}
return seen
}
}
print([1,2,2,3].removingDuplicates()) // [1,2,3]Várias restrições
Combine restrições: restrinja o tipo genérico e seus tipos associados, por exemplo, exigindo igualdade entre os elementos de uma sequência.
// Require both Sequence and Equatable elements; force same-type relationship
func allEqual<S>(_ s: S) -> Bool
where S: Sequence, S.Element: Equatable {
var it = s.makeIterator()
guard let first = it.next() else { return true }
while let v = it.next() { if v != first { return false } }
return true
}
print(allEqual([2,2,2])) // true
print(allEqual([1,2,1])) // falseInferência na prática
O Swift infere parâmetros genéricos a partir dos argumentos e do contexto, portanto raramente você especifica <T> explicitamente.
// Inference: compiler deduces concrete types
let i = indexOf(10, in: [5,10,15]) // T is Int
let j = minimum(["z","x"]) // T is String
print(i ?? -1, j ?? "")Significado da condição
Verificação rápida: o que faz uma cláusula where?
Recapitulação
Recapitulação: restrinja os genéricos com condições, como igualdade ou comparabilidade, e confie na inferência de tipos do Swift para escolher tipos concretos nas chamadas.
Perguntas Frequentes
A aula “Restrições (where) e inferência de tipos” é grátis?
Sim — o texto completo de “Restrições (where) e inferência de tipos” é 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 “Restrições (where) e inferência de tipos”?
Restrinja código genérico usando where (por exemplo, restrições Equatable/Comparable ou Element) e veja como o Swift infere tipos genéricos nos locais de chamada. 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 “Restrições (where) e inferência de tipos”?
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
- Funções e tipos genéricos
- Restrições (where) e inferência de tipos
- Algoritmos genéricos em coleções