Cuándo usar existentials (any P) frente a genéricos
Elija entre any P (tipos existential) y generics : almacenamiento heterogéneo y comportamiento dinámico frente a especialización en tiempo de compilación y garantías estáticas.
Cuándo usar existentials (any P) frente a genéricos es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 3 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.
Existenciales frente a genéricos
Los existenciales (any P) almacenan valores de un tipo concreto desconocido que cumple un protocolo. Los genéricos (<T: P>) conservan el tipo concreto en tiempo de compilación para permitir la especialización.
Configuración del protocolo
Los protocolos sin tipos asociados son fáciles de utilizar como existenciales any P y como restricciones genéricas.
protocol Animal {
func speak() -> String
}
struct Dog: Animal { func speak() -> String { "woof" } }
struct Cat: Animal { func speak() -> String { "meow" } }Arrays heterogéneos
Utilice [any Animal] para almacenar juntos distintos tipos que cumplen el protocolo y llamar únicamente a la API del protocolo.
let zoo: [any Animal] = [Dog(), Cat()] // heterogeneous array
for a in zoo { print(a.speak()) } // "woof", "meow"Especialización mediante genéricos
Los genéricos conservan el tipo concreto (T), lo que permite una mayor optimización y comprobaciones más estrictas en tiempo de compilación.
// Generic version — compiler specializes for each concrete type
func shout<T: Animal>(_ a: T) {
// Can inline/specialize based on concrete T
print(a.speak().uppercased())
}
shout(Dog()) // WOOF
shout(Cat()) // MEOWLimitaciones de los PAT
Los protocolos con tipos asociados no funcionan bien como existenciales simples si necesita acceder al tipo asociado. Prefiera los genéricos o el borrado de tipos (por ejemplo, AnySequence).
protocol Container {
associatedtype Item
func get(_ i: Int) -> Item
}
// Storing as `any Container` loses the concrete Item.
// You can't use Item directly without additional constraints or type erasure.Cuál elegir
Elija:
- any P cuando necesite almacenamiento heterogéneo o comportamiento dinámico utilizando únicamente la API del protocolo.
- Genéricos cuando desee tipos estáticos, una mejor optimización o necesite relacionar varios tipos (por ejemplo, el mismo Item).
- Para los PAT cuyo Item sea relevante, utilice genéricos o añada borrado de tipos.
any P frente a genéricos
Comprobación rápida: ¿Cuándo se prefiere any P?
Resumen
Resumen: Utilice any P para combinar distintos tipos que cumplen el protocolo y obtener comportamiento dinámico; utilice genéricos para la especialización en tiempo de compilación y cuando sean relevantes los tipos asociados o las relaciones entre tipos.
Preguntas frecuentes
¿La lección «Cuándo usar existentials (any P) frente a genéricos» es gratis?
Sí — el texto completo de «Cuándo usar existentials (any P) frente a genéricos» 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 «Cuándo usar existentials (any P) frente a genéricos»?
Elija entre any P (tipos existential) y generics : almacenamiento heterogéneo y comportamiento dinámico frente a especialización en tiempo de compilación y garantías estáticas. 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 3 de 3.
¿Cuánto tiempo toma la lección «Cuándo usar existentials (any P) frente a genéricos»?
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
- associatedtype y protocolos genéricos
- Patrones de type erasure (AnySequence/AnyIterator)
- Cuándo usar existentials (any P) frente a genéricos