Swift Academy · Lección

Tipos asociados principales y throws tipados

Restrinja existenciales de protocolos y conozca la propagación de errores tipados de Swift 6.

Lección 4 de 413 pasos

Tipos asociados principales y throws tipados es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 4 de 4. 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 4 lecciones en total.

Tipos asociados principales

Swift 5.7 permite especificar tipos asociados principales en los protocolos, lo que habilita existenciales restringidos.

protocol Container<Element> {
  associatedtype Element
  var items: [Element] { get }
}
struct Bag<T>: Container { var items: [T] = [] }

Existenciales restringidos

Con los tipos asociados principales puede escribir any Container para restringir el existencial.

func printItems(_ c: any Container<Int>) {
  c.items.forEach { print($0) }
}
printItems(Bag(items: [1,2,3]))

Existenciales restringidos para colecciones

Los protocolos de la biblioteca estándar, como Collection, ahora admiten tipos asociados principales.

func first(_ c: any Collection<String>) -> String? {
  c.first
}
print(first(["a","b","c"]) ?? "none")

Introducción a los throws tipados

Swift 6 introduce los throws tipados, que permiten declarar el tipo exacto de error que una función puede lanzar.

enum NetworkError: Error { case timeout, notFound }
func fetch() throws(NetworkError) -> Data {
  throw NetworkError.timeout
}

Catch exhaustivo con throws tipados

Como se conoce el tipo de error, el compilador puede verificar que todos los casos se gestionen de forma exhaustiva.

do {
  let _ = try fetch()
} catch .timeout {
  print("Timed out")
} catch .notFound {
  print("Not found")
}

Throws tipados en protocolos

Los requisitos de los protocolos pueden especificar un throw tipado, lo que permite que los tipos conformes proporcionen tipos de error precisos.

protocol Fetchable {
  associatedtype Failure: Error
  func fetch() throws(Failure) -> Data
}

Rethrowing con throws tipados

rethrows funciona con throws tipados: la función externa propaga el tipo de error interno.

func map<T, E: Error>(_ array: [T], transform: (T) throws(E) -> T) throws(E) -> [T] {
  try array.map { try transform($0) }
}

Combinación de tipos asociados principales y throws tipados

Puede usar ambas funcionalidades conjuntamente para crear API precisas y con seguridad de tipos.

protocol Repository<Model> {
  associatedtype Model
  associatedtype Failure: Error
  func fetchAll() throws(Failure) -> [Model]
}

Throws tipados opacos

throws(any Error) equivale a los throws sin tipo y proporciona una vía de escape.

func riskyOp() throws(any Error) {
  // can throw any error
}

Migración: de throws sin tipo a throws tipados

Ruta de migración: anote paso a paso las funciones existentes que lanzan errores con el tipo de error concreto.

// Before:
func load() throws -> Data { ... }
// After:
func load() throws(NetworkError) -> Data { ... }

Throws tipados y async

Los throws tipados se combinan de forma natural con async: async throws(E) es una sintaxis válida.

func fetchAsync() async throws(NetworkError) -> Data {
  throw NetworkError.notFound
}

Comprobación rápida

¿Qué permite un tipo asociado principal en un protocolo?

Resumen de la lección

Los tipos asociados principales (Swift 5.7) permiten existenciales restringidos como any Collection. Los throws tipados (Swift 6) permiten declarar tipos de error exactos para bloques catch exhaustivos. Ambas funcionalidades mejoran la seguridad de tipos y la expresividad de las API.

Gratis para empezar

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 «Tipos asociados principales y throws tipados» es gratis?

Sí — el texto completo de «Tipos asociados principales y throws tipados» 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 4 lecciones en total.

¿Qué aprenderé en «Tipos asociados principales y throws tipados»?

Restrinja existenciales de protocolos y conozca la propagación de errores tipados de Swift 6. 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 4 de 4.

¿Cuánto tiempo toma la lección «Tipos asociados principales y throws tipados»?

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. Restricciones genéricas y cláusulas where
  2. Tipos opacos con la palabra clave some
  3. Existenciales con any y type erasure
  4. Tipos asociados principales y throws tipados
← Volver a Swift Academy