some P (tipos de resultado opacos): ocultar tipos concretos
Devuelva some P para ocultar el tipo concreto de retorno y prometer que se ajusta a P ; quienes llaman obtienen rendimiento de tipos estático sin exponer la implementación.
some P (tipos de resultado opacos): ocultar tipos concretos es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 1 de 3. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 3 lecciones en total.
¿Por qué usar tipos de resultado opacos?
Los tipos de resultado opacos usan some P para ocultar un tipo concreto detrás de un protocolo. El tipo concreto es fijo para esa función, pero quienes la llaman solo ven la interfaz del protocolo.
- Encapsulación sin perder rendimiento estático
- Ideales para fábricas y API similares a DSL
Fábrica opaca básica
makeUnitCircle() devuelve some Shape. Quienes llaman a la función pueden llamar a area(), pero no pueden depender del 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.14Fijo por función
El tipo oculto es fijo por función. Otra función que devuelva some Shape puede ocultar un 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.0Un único tipo oculto
Regla: una función con un retorno opaco debe devolver el mismo tipo concreto en todos sus recorridos. Ramas diferentes → error de compilación.
// ❌ 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 con genéricos
Los retornos opacos se combinan con genéricos. Quien llama a la función ve un Shape, mientras usted mantiene privada la implementación de 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 * πCuándo elegir tipos opacos
Use tipos opacos cuando:
- Quiera ocultar la implementación pero conservar el tipado estático.
- Las API deban devolver una vista de protocolo (por ejemplo,
Shape) sin exponer tipos concretos. - Construya canalizaciones/DSL que encadenen constructores sin dejar de ser genéricas.
(En la próxima lección los comparará con los existenciales.)
Definición de un resultado opaco
Comprobación rápida: ¿Qué promete some P?
Resumen
Resumen: Los tipos de resultado opacos (some P) ocultan los tipos concretos, pero mantienen el despacho estático. El tipo subyacente es fijo por función; úselos para crear API limpias, rápidas y encapsuladas.
Aprende Swift con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 122
- Lecciones
- 409
Preguntas frecuentes
¿La lección «some P (tipos de resultado opacos): ocultar tipos concretos» es gratis?
Sí — el texto completo de «some P (tipos de resultado opacos): ocultar tipos concretos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 3 lecciones en total.
¿Qué aprenderé en «some P (tipos de resultado opacos): ocultar tipos concretos»?
Devuelva some P para ocultar el tipo concreto de retorno y prometer que se ajusta a P ; quienes llaman obtienen rendimiento de tipos estático sin exponer la implementación. Practicas Swift Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Swift Academy?
No se requiere experiencia previa. Swift Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 3.
¿Cuánto tiempo toma la lección «some P (tipos de resultado opacos): ocultar tipos concretos»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Swift Academy?
Sí. Cada lección de Swift Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- some P (tipos de resultado opacos): ocultar tipos concretos
- any P (existencial): ventajas y desventajas de la distribución dinámica
- Elegir entre some, any y genéricos