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 compileHash 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: HashableControle 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 NumericPresente 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
- Conformidades condicionais
- Restrições recursivas e genéricos de ordem superior
- Cláusulas where em extensões