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.
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.14Fixo 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.0Apenas 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.
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
- some P (tipos de resultado opacos): ocultando tipos concretos
- any P (existencial): compromissos e despacho dinâmico
- Escolhendo entre some, any e genéricos