0Pricing
Swift Academy · Aula

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)  // 1

Restriçã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]))   // false

Inferê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

  1. Funções e tipos genéricos
  2. Restrições (where) e inferência de tipos
  3. Algoritmos genéricos em coleções
← Voltar para Swift Academy