0Pricing
Swift Academy · Lección

Diseño de APIs con semántica de valor

Aprenda a elegir entre struct y class al diseñar interfaces públicas y frameworks.

Diseño de APIs con semántica de valor 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.

Bienvenida

Diseñar API basadas en la semántica de valor produce código predecible, seguro para los hilos y fácil de probar. Examinemos los principios y patrones que le ayudarán a tomar esta decisión.

El contrato de la semántica de valor

Un tipo tiene semántica de valor si: • Dos copias independientes permanecen independientes para siempre • Modificar una copia nunca afecta a la otra • El tipo se comporta como `Int`: `a = b; a += 1` deja `b` sin cambios

API pública: prefiera tipos de retorno valor

```swift // Reference semantics — caller shares state: func getUser() -> UserClass { ... } // Value semantics — caller gets independent copy: func getUser() -> UserStruct { ... } ``` Los tipos de retorno valor protegen el estado interno frente a las modificaciones externas.

Tipos referencia inmutables

Cuando una clase es siempre inmutable, se comporta de forma similar a un valor: ```swift final class Token { let value: String init(_ v: String) { value = v } // No mutable state — safe to share freely } ```

Lista de comprobación: elegir struct en lugar de class

Prefiera struct cuando: ✓ El tipo representa datos, no una identidad ✓ No necesita herencia ✓ Las instancias no deben compartirse ni tener alias ✓ Es Equatable comparando los valores de sus campos ✓ Funciona bien con Swift Concurrency (Sendable)

Sendable y semántica de valor

Swift 6 Concurrency exige que los tipos que atraviesan los límites de los actores sean `Sendable`: ```swift struct Message: Sendable { var text: String; var timestamp: Date } // Safe to pass between actors ``` Los tipos valor cuyas propiedades son todas Sendable son `Sendable` automáticamente.

Cómo hacer que las API de clases sean seguras con valores

```swift struct Config { // Expose value snapshot instead of the class: func snapshot() -> Config { self } // copy by value semantics } // Or use a value-type DTO: struct UserDTO: Sendable { var id: UUID; var name: String } ```

Patrón Builder con tipos valor

```swift struct Request { var url: URL var method: String = "GET" var headers: [String:String] = [:] func adding(header: String, value: String) -> Request { var copy = self copy.headers[header] = value return copy } } let r = Request(url: url).adding(header: "Auth", value: "Bearer x") ```

Indicador en la documentación de la API

Elegir struct en lugar de class transmite una señal clara a los consumidores de la API: • "Estos son datos: cópielos libremente" • "Modificar su copia no afectará a la mía" • "Es seguro pasar esto entre hilos" Esto reduce la necesidad de realizar copias defensivas en el código consumidor.

Cuándo aceptar la semántica de referencia

Acepte la semántica de clase o de referencia cuando: • La identidad sea importante (`===`): dos objetos `User` pueden representar a la misma persona • El estado mutable compartido sea parte de la funcionalidad: `Database`, `Cache`, `AudioEngine` • Necesite interoperabilidad con ObjC: los tipos de UIKit y AppKit son clases • Necesite callbacks del ciclo de vida: `deinit` para liberar recursos

Comprobación rápida

¿Qué palabra clave de Swift marca un tipo como seguro para pasarlo a través de los límites de los actores en Swift Concurrency?

Resumen

Conclusiones clave: • Semántica de valor: las modificaciones son locales y no existe aliasing • Prefiera struct para los modelos de datos y class para la identidad o el ciclo de vida • Las clases inmutables se comportan como tipos valor • `Sendable` + tipos valor = concurrencia segura • El patrón Builder mediante copias de structs crea API inmutables y limpias ¡Curso completado! Siguiente: patrones de ARC y gestión de memoria.

Preguntas frecuentes

¿La lección «Diseño de APIs con semántica de valor» es gratis?

Sí — el texto completo de «Diseño de APIs con semántica de valor» 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 «Diseño de APIs con semántica de valor»?

Aprenda a elegir entre struct y class al diseñar interfaces públicas y frameworks. 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 «Diseño de APIs con semántica de valor»?

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. Stack frente a heap: dónde viven los valores
  2. Mutación, compartición y aliasing inesperado
  3. Grafos mixtos de valores y referencias
  4. Diseño de APIs con semántica de valor
← Volver a Swift Academy