Swift Academy · Aula

some P (tipos de resultado opacos): ocultando tipos concretos

Retorne some P para ocultar o tipo concreto de retorno, garantindo ao mesmo tempo que ele esteja em conformidade com P ; quem chama obtém desempenho de tipagem estática sem expor a implementação.

Aula 1 de 38 etapas

some P (tipos de resultado opacos): ocultando tipos concretos é 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 tipos de resultado opacos?

Tipos de resultado opacos usam some P para ocultar um tipo concreto por trás de um protocolo. O tipo concreto é fixo para essa função, mas quem a chama vê apenas a superfície do protocolo.

  • Encapsulamento sem perder o desempenho estático
  • Ótimos para fábricas e APIs semelhantes a DSL

Fábrica opaca básica

makeUnitCircle() retorna some Shape. Quem chama pode chamar area(), mas não pode depender do tipo concreto.

protocol Shape {
    func area() -> Double
}
struct Circle: Shape {
    let r: Double
    func area() -> Double { .pi * r * r }
}
struct Square: Shape {
    let s: Double
    func area() -> Double { s * s }
}

// Opaque factory: callers know it's a Shape, not which one
func makeUnitCircle() -> some Shape {
    Circle(r: 1.0)    // concrete type is hidden
}

let sh = makeUnitCircle()
print(String(format: "%.2f", sh.area()))  // 3.14

Fixo por função

O tipo oculto é fixo por função. Outra função que retorne some Shape pode ocultar um tipo concreto diferente.

// Each function using "some Shape" chooses one hidden concrete type.
// Within the same function, it must always be the same concrete type.
func makeSquare(side: Double) -> some Shape {
    Square(s: side)   // fixed to Square for this function
}

let a = makeUnitCircle()
let b = makeUnitCircle()
print(a.area() == b.area())  // true for two unit circles

let q = makeSquare(side: 2)
print(q.area())              // 4.0

Apenas um tipo oculto

Regra: uma função com retorno opaco deve retornar o mesmo tipo concreto em todos os caminhos. Ramos diferentes → erro de compilação.

// ❌ This would NOT compile, because different branches return different concrete types:
// func makeShape(flag: Bool) -> some Shape {
//     if flag {
//         return Circle(r: 1)
//     } else {
//         return Square(s: 1) // error: underlying type must be the same
//     }
// }
// Rule: an opaque-returning function must always produce the same concrete type.

Opacos com genéricos

Retornos opacos podem ser compostos com genéricos. Quem chama vê uma Shape, enquanto você mantém privada a implementação Scaled<Circle>.

// A generic decorator that also conforms to Shape
struct Scaled<S: Shape>: Shape {
    let base: S
    let k: Double
    func area() -> Double { base.area() * k * k }
}

// Factory still hides the concrete generic type
func makeScaledUnitCircle(k: Double) -> some Shape {
    Scaled(base: Circle(r: 1.0), k: k)
}

let s1 = makeScaledUnitCircle(k: 2)
print(s1.area())  // 4 * π

Quando escolher tipos opacos

Use tipos opacos quando:

  • Você quiser ocultar a implementação, mas manter a tipagem estática.
  • As APIs deverem retornar uma visão de protocolo (por exemplo, Shape) sem expor tipos concretos.
  • Você criar fluxos de DSL que encadeiam construtores mantendo-se genéricos.

(Você os comparará com existenciais na próxima lição.)

Definição de resultado opaco

Verificação rápida: O que some P garante?

Recapitulação

Recapitulação: Tipos de resultado opacos (some P) ocultam tipos concretos, mas mantêm o dispatch estático. O tipo subjacente é fixo por função; use-os para APIs limpas, rápidas e encapsuladas.

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 “some P (tipos de resultado opacos): ocultando tipos concretos” é grátis?

Sim — o texto completo de “some P (tipos de resultado opacos): ocultando tipos concretos” é 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 “some P (tipos de resultado opacos): ocultando tipos concretos”?

Retorne some P para ocultar o tipo concreto de retorno, garantindo ao mesmo tempo que ele esteja em conformidade com P ; quem chama obtém desempenho de tipagem estática sem expor a implementação. 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 “some P (tipos de resultado opacos): ocultando tipos concretos”?

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. some P (tipos de resultado opacos): ocultando tipos concretos
  2. any P (existencial): compromissos e despacho dinâmico
  3. Escolhendo entre some, any e genéricos
← Voltar para Swift Academy