Para cualquier iOS Developer, la evolución de SwiftUI ha sido un viaje constante hacia la simplificación. Con cada iteración de Xcode, Apple busca reducir la fricción entre la idea del desarrollador y la implementación técnica. Una de las adiciones más potentes y, a veces, menos comprendidas en la programación Swift reciente es la macro @Entry.
En este tutorial desglosaremos qué es esta macro, cómo transforma la gestión de datos en el Environment y cómo puedes aplicarla hoy mismo para crear aplicaciones robustas en iOS, macOS y watchOS.
¿Qué es la Macro @Entry en SwiftUI?
La macro @Entry es una utilidad de generación de código introducida para eliminar el “boilerplate” (código repetitivo) necesario al declarar nuevas propiedades en contenedores de datos compartidos de SwiftUI. Antes de su llegada, añadir una simple variable al entorno requería múltiples pasos manuales que ensuciaban el archivo de definición.
Principalmente, @Entry automatiza la creación de claves para:
- EnvironmentValues: Datos que fluyen por la jerarquía de vistas.
- FocusedValues: Estados de foco para aplicaciones de escritorio y iPad.
- Transaction: Parámetros de animación.
- ContainerValues: Metadatos para layouts personalizados.
El problema que resuelve: El enfoque tradicional
Para entender el valor de @Entry, primero debemos recordar cómo sufríamos los desarrolladores antes. Si querías pasar un valor de configuración global, tenías que escribir todo este bloque:
struct MyCustomKey: EnvironmentKey {
static let defaultValue: String = "Default"
}
extension EnvironmentValues {
var myCustomValue: String {
get { self[MyCustomKey.self] }
set { self[MyCustomKey.self] = newValue }
}
}
Este proceso era propenso a errores tipográficos y hacía que la programación Swift se sintiera innecesariamente verbosa para tareas simples.
Cómo usar la Macro @Entry en SwiftUI
La implementación moderna en Xcode es asombrosamente limpia. Al usar @Entry, el compilador genera automáticamente la estructura de la clave y la propiedad computada por ti en tiempo de compilación.
Paso 1: Declaración Simple
Simplemente extiende el contenedor deseado (usualmente EnvironmentValues) y declara tu variable con la macro:
extension EnvironmentValues {
@Entry var themeColor: Color = .blue
@Entry var userRole: String = "Guest"
}
¡Eso es todo! El valor que asignas directamente se convierte en el defaultValue automático.
Paso 2: Consumo en la Vista (iOS)
Una vez definida, cualquier iOS Developer puede acceder a ella mediante el property wrapper estándar @Environment:
struct ContentView: View {
@Environment(\.themeColor) var themeColor
var body: some View {
VStack {
Text("El color actual es: \(themeColor.description)")
.foregroundStyle(themeColor)
}
.padding()
}
}
#Preview {
ContentView()
.environment(\.themeColor, .red)
}
Aplicaciones Multiplataforma: macOS y watchOS
La consistencia es clave en el ecosistema Apple. La macro @Entry no es exclusiva de iOS; es una herramienta fundamental de Swift y SwiftUI para todo el ecosistema.
Implementación en macOS: FocusedValues
En macOS, gestionar el foco es vital para aplicaciones de productividad. Usar @Entry para FocusedValues simplifica la comunicación entre la barra de menús y la vista activa.
extension FocusedValues {
@Entry var selectedProjectID: UUID? = nil
}
struct MacEditorView: View {
@FocusedValue(\.selectedProjectID) var projectID
var body: some View {
Text("Editando proyecto: \(projectID?.uuidString ?? "Ninguno")")
}
}
Uso en watchOS: Dinamismo en Pantallas Pequeñas
Para watchOS, donde las jerarquías de vistas suelen ser profundas pero visualmente simples, @Entry permite pasar estilos rápidos (como el radio de los botones o configuraciones de marca) sin inyectar dependencias pesadas en cada constructor de vista.
Manejo de Tipos Complejos y Opcionales
No estás limitado a tipos primitivos. Puedes usar estructuras personalizadas, lo cual es una práctica recomendada para cualquier iOS Developer profesional que busque escalabilidad.
struct UserProfile {
let name: String
let points: Int
}
extension EnvironmentValues {
@Entry var currentUser: UserProfile = UserProfile(name: "Anónimo", points: 0)
}
La macro infiere el tipo correctamente, garantizando que el sistema de tipos de Swift se mantenga íntegro y seguro (Type-safe).
Ventajas para el Desarrollo Profesional
- Legibilidad: El código es mucho más fácil de leer para otros miembros del equipo.
- Mantenibilidad: Si necesitas cambiar el valor por defecto, solo modificas una línea.
- Menos Errores: Al no tener que escribir la extensión manualmente, eliminas el riesgo de que la clave no coincida con la propiedad.
- Optimización con Xcode: La integración con el autocompletado es nativa y fluida.
Conclusión
La macro @Entry en SwiftUI es un testimonio de cómo la programación Swift está madurando. Al eliminar la fricción técnica, nos permite a los desarrolladores concentrarnos en lo que realmente importa: crear experiencias de usuario increíbles en iOS, macOS y watchOS.
Si tienes cualquier duda sobre este artículo, contacta conmigo y estaré encantado de ayudarte . Puedes contactar conmigo en mi perfil de X o en mi perfil de Instagram










