0Pricing
Swift Academy · Lección

Elegir entre some, any y genéricos

Elija generics para el tipado estático homogéneo, some P para ocultar un tipo concreto fijo y any P para el polimorfismo heterogéneo.

Elegir entre some, any y 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.

¿Cuándo usar cada opción?

Regla práctica:

  • Genéricos: el mismo tipo concreto en cada llamada; ofrecen las mejores comprobaciones en tiempo de compilación y rendimiento.
  • some P: oculta el tipo de retorno concreto, que es fijo por función.
  • any P: permite combinar conformantes (heterogéneos) y usar despacho dinámico.

Genéricos: homogéneos

Los genéricos son ideales para datos homogéneos y para la optimización (despacho estático, inserción de código).

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 } }

// Generic: one concrete Shape type per call site (homogeneous)
func totalAreaGeneric<S: Sequence, T: Shape>(_ xs: S) -> Double where S.Element == T {
    xs.reduce(0) { $0 + $1.area() }
}
print(totalAreaGeneric([Circle(r:1), Circle(r:2)]))  // OK
// totalAreaGeneric([Circle(r:1), Square(s:2)])      // ❌ different types

Opacos: ocultos, pero fijos

some P devuelve un tipo fijo, pero oculto. Es ideal cuando quiere encapsulación sin perder rendimiento estático.

// Opaque factory hides the concrete type while guaranteeing Shape
func unitShape(flag: Bool) -> some Shape {
    // Must return the SAME underlying type on all paths; pick one.
    Circle(r: 1)
}
let s = unitShape(flag: true)
print(String(format: "%.2f", s.area()))  // 3.14

any P: heterogéneo

any P permite incluir tipos mixtos en una misma colección o variable; los métodos se despachan dinámicamente mediante la interfaz del protocolo.

// Existential: store mixed conformers
let mixed: [any Shape] = [Circle(r: 1), Square(s: 2)]
let sum = mixed.reduce(0) { $0 + $1.area() }   // dynamic dispatch
print(String(format: "%.2f", sum))

Comparación de las formas de las API

Elija la interfaz:

  • Genérico: quien llama controla el tipo concreto.
  • Opaco: usted oculta el tipo, que es fijo por función.
  • Existencial: los tipos concretos pueden variar dinámicamente.
// Three API shapes for the same idea: "make a Shape"

// 1) Generic return — exposes concrete type to caller
func makeGeneric<T: Shape>(_ t: T) -> T { t }

// 2) Opaque return — hides concrete type but fixed
func makeOpaqueCircle() -> some Shape { Circle(r: 1) }

// 3) Existential return — can return any conformer
func makeExistential(_ big: Bool) -> any Shape { big ? Square(s: 3) : Circle(r: 1) }

let g: Circle = makeGeneric(Circle(r: 2))      // caller knows concrete type
let o = makeOpaqueCircle()                      // caller sees only Shape
let e = makeExistential(true)                   // could be Circle or Square at runtime
print(g.area(), o.area(), e.area())

Hoja de referencia

Directrices:

  • Prefiera los genéricos por su rendimiento y tipado estricto cuando los datos sean homogéneos.
  • Use some P para ocultar tipos de retorno y mantener estables las API.
  • Use any P para colecciones similares a complementos o colecciones mixtas.
  • Evite any P para protocolos con tipos asociados/Self, a menos que aplique type erasure.

Comprobación de decisión: elegir some/any/genéricos

Comprobación rápida: ¿Qué opción oculta un tipo de retorno concreto y fijo detrás del protocolo P?

Resumen

Resumen:

  • Genéricos = homogéneos, más rápidos y más estáticos.
  • some P = oculta el tipo concreto, fijo por función.
  • any P = heterogéneos, con despacho dinámico.

Preguntas frecuentes

¿La lección «Elegir entre some, any y genéricos» es gratis?

Sí — el texto completo de «Elegir entre some, any y 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 «Elegir entre some, any y genéricos»?

Elija generics para el tipado estático homogéneo, some P para ocultar un tipo concreto fijo y any P para el polimorfismo heterogéneo. 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 «Elegir entre some, any y 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

  1. some P (tipos de resultado opacos): ocultar tipos concretos
  2. any P (existencial): ventajas y desventajas de la distribución dinámica
  3. Elegir entre some, any y genéricos
← Volver a Swift Academy