0Pricing
Swift Academy · Aula

Conformidades condicionais

Faça um tipo genérico atender a um protocolo somente se seu parâmetro de tipo cumprir as restrições (por exemplo, Box<T>: Equatable where T: Equatable ).

Conformidades condicionais é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 1 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 conformidade condicional?

A conformidade condicional adiciona conformidade com um protocolo somente quando os parâmetros de tipo atendem às restrições. Isso mantém as APIs precisas, evita código repetitivo e combina de forma poderosa com a biblioteca padrão.

Base de um tipo genérico

Comece com um tipo genérico. Sem trabalho adicional, Box não tem conformidade com igualdade/hash, mesmo que T tenha.

struct Box<T> {
    var value: T
}
let bi = Box(value: 3)
let bs = Box(value: "hi")
// At this point Box has no Equatable/Hashable, regardless of T.

Igualdade condicional

Adicione conformidade com igualdade somente se T: Equatable. O código que compara caixas de tipos sem igualdade não será compilado (o que proporciona mais segurança).

extension Box: Equatable where T: Equatable {
    static func == (lhs: Box<T>, rhs: Box<T>) -> Bool {
        lhs.value == rhs.value
    }
}
print(Box(value: 5) == Box(value: 5))   // true
// Works because Int is Equatable
// print(Box(value: someNonEquatable) == ...) // won't compile

Hash condicional

Da mesma forma, adote a capacidade de hash somente quando o elemento tiver essa capacidade. Assim, Set/Dictionary funcionarão com Box<T>.

extension Box: Hashable where T: Hashable {
    func hash(into hasher: inout Hasher) {
        hasher.combine(value)
    }
}
let set: Set<Box<Int>> = [Box(value: 1), Box(value: 1)]
print(set.count)  // 1 because Hashable is available only when T: Hashable

Controle de funcionalidades com restrições

Use extensões com restrições para expor methods somente a determinados recursos (por exemplo, T: Numeric), mantendo a API básica pequena.

// Add extra APIs only when T supports them
extension Box where T: Numeric {
    func doubled() -> T { value + value }
}
print(Box(value: 7).doubled())     // 14 (Int is Numeric)
// Box(value: "hi").doubled()      // won't compile — String not Numeric

Presente na biblioteca padrão

Você já usa isso diariamente:

  • Vetor: igualdade somente quando Element: Equatable.
  • Dicionário/conjunto: hash somente quando as chaves/os elementos são Hashable.
  • Opcional: igualdade somente quando Wrapped: Equatable.

Benefício: APIs precisas e seguras em tempo de compilação.

Verificação da definição

Verificação rápida: o que a conformidade condicional permite?

Recapitulação

Recapitulação: use extensão Tipo: Protocolo onde ... para adicionar conformidades e APIs somente quando as restrições forem atendidas. Isso mantém o código preciso, seguro e fácil de compreender.

Perguntas Frequentes

A aula “Conformidades condicionais” é grátis?

Sim — o texto completo de “Conformidades condicionais” é 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 “Conformidades condicionais”?

Faça um tipo genérico atender a um protocolo somente se seu parâmetro de tipo cumprir as restrições (por exemplo, Box<T>: Equatable where T: Equatable ). 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 3.

Quanto tempo leva a aula “Conformidades condicionais”?

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. Conformidades condicionais
  2. Restrições recursivas e genéricos de ordem superior
  3. Cláusulas where em extensões
← Voltar para Swift Academy