Swift Academy · Aula

Tipos opacos com a palavra-chave some

Retorne tipos opacos de funções para preservar a identidade do tipo sem expô-la.

Aula 2 de 413 etapas

Tipos opacos com a palavra-chave some é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 2 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.

O problema que os tipos opacos resolvem

Retornar um tipo de protocolo com any perde informações de tipo. some as preserva enquanto oculta a implementação.

protocol Shape { var area: Double { get } }
struct Circle: Shape { var area: Double { .pi * 4 } }

Retornando some Protocol

some Shape como tipo de retorno informa ao chamador "Eu retorno um tipo Shape específico" sem revelar qual é.

func makeShape() -> some Shape {
  return Circle()
}
let s = makeShape()
print(s.area)

A identidade do tipo é preservada

Como os tipos some têm um tipo subjacente fixo, o compilador permite operações que exigem Self.

func makeEquatableShape() -> some Shape & Equatable {
  return Circle()
}
let a = makeEquatableShape()
let b = makeEquatableShape()
print(a == b) // works because types match

some vs. any

some é opaco (um único tipo fixo), enquanto any é existencial (qualquer tipo em conformidade em tempo de execução).

func withSome() -> some Shape { Circle() }  // opaque
func withAny() -> any Shape { Circle() }   // existential

some no Body do SwiftUI

O SwiftUI usa some View para que o corpo de cada visualização retorne um único tipo consistente sem expor os detalhes do layout.

struct ContentView: View {
  var body: some View {
    Text("Hello, World!")
  }
}

Parâmetros opacos com some

O Swift 5.7+ permite some Protocol em posições de parâmetros como uma abreviação sintática para restrições genéricas.

func printArea(_ shape: some Shape) {
  print(shape.area)
}
printArea(Circle())

Genéricos invertidos

Um parâmetro opaco some P equivale a (_ value: T). O compilador infere T no local da chamada.

func doubled(_ value: some Numeric) -> some Numeric {
  value * 2
}

Restrições em some

Você pode combinar protocolos com tipos opacos, assim como faz com genéricos.

func process(_ item: some Codable & Hashable) {
  let hash = item.hashValue
  print(hash)
}

Retornando tipos diferentes

Ao contrário dos existenciais, você não pode retornar tipos diferentes em conformidade a partir de ramificações diferentes com tipos opacos.

// This would NOT compile:
// func shape(_ big: Bool) -> some Shape {
//   big ? Circle() : Square()  // ERROR: different types
// }

Tipos opacos em protocolos

Protocolos com tipos associados tornam-se mais simples de usar como tipos de retorno com some.

protocol Buildable { associatedtype Output; func build() -> Output }
func build(_ b: some Buildable) -> some Any {
  b.build()
}

Quando escolher some

Prefira some quando retornar um único tipo consistente e quiser preservar sua identidade. Use any quando precisar de coleções heterogêneas.

var shapes: [any Shape] = [Circle(), Circle()]
let single: some Shape = Circle()

Verificação rápida

O que a palavra-chave some garante sobre um tipo de retorno?

Recapitulação da lição

some cria tipos de retorno opacos que ocultam o tipo concreto enquanto preservam a identidade do tipo. some View do SwiftUI é o exemplo clássico. Use some para retornos de um único tipo e any para coleções heterogêneas.

Grátis para começar

Aprenda Swift com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
122
Aulas
409

Perguntas Frequentes

A aula “Tipos opacos com a palavra-chave some” é grátis?

Sim — o texto completo de “Tipos opacos com a palavra-chave some” é 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 “Tipos opacos com a palavra-chave some”?

Retorne tipos opacos de funções para preservar a identidade do tipo sem expô-la. 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 4.

Quanto tempo leva a aula “Tipos opacos com a palavra-chave some”?

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. Restrições genéricas e cláusulas where
  2. Tipos opacos com a palavra-chave some
  3. Existenciais com any e apagamento de tipo
  4. Tipos associados principais e erros tipados
← Voltar para Swift Academy