Simplificando environment values con la macro Entry

Durante la WWDC24, Apple presentó la macro Entry con la finalidad de simplificar la creación de EnvironmentValues personalizados. Cabe recordar que EnvironmentValues es una estructura que proporciona SwiftUI para propagar valores en las vistas a través del modificador .environment y ser utilizados mediante el property wrapper @Environment.

Un poco de historia

En el pasado, para añadir un valor en EnvironmentValues, tenías que:

  1. Crear una estructura que conformara el protocolo EnvironmentKey, que sirve como llave para acceder al valor en el environment y que requiere un valor por defecto. Por ejemplo, para crear un valor que especifique un color primario:
private struct PrimaryColorKey: EnvironmentKey {
static var defaultValue: Color = .black
}
  1. Extender EnvironmentValues para añadir tu valor personalizado a través de una propiedad computada:
extension EnvironmentValues {
var primaryColor: Color {
get { self[PrimaryColorKey.self] }
set { self[PrimaryColorKey.self] = newValue }
}
}
  1. Propagar tu valor personalizado en tus vistas:
ContentView()
.environment(\.primaryColor, .red)
  1. Utilizar tu valor mediante el property wrapper @Environment dentro de las vistas donde asignaste el modificador .environment o vistas hijas, en este ejemplo dentro de ContentView:
@Environment(\.primaryColor) var primaryColor

Actualidad

Con la macro Entry no es necesario crear una estructura que conforme el protocolo EnvironmentKey y se simplifica la creación de las propiedades computadas en la extensión de EnvironmentValues. Es decir, te ahorras el primer paso, simplificas el segundo y los demás pasos se deben seguir de igual manera. Para hacer uso de la macro, debes crear una variable marcada @Entry dentro de la extensión EnvironmentValues. Siguiendo el ejemplo anterior, para crear un valor que especifique un color primario con Entry:

extension EnvironmentValues {
@Entry var primaryColor: Color = .black
}

Si expandes la macro, puedes observar que esta sigue haciendo uso de EnvironmentKey y de la propiedad computada:

@Entry var primaryColor: Color = .black
{
get {
self[__Key_primaryColor.self]
}
set {
self[__Key_primaryColor.self] = newValue
}
}
private struct __Key_primaryColor: SwiftUI.EnvironmentKey {
typealias Value = Color
static let defaultValue: Value = .black
}

Esto quiere decir que EnvironmentKey no está siendo marcado como obsoleto (deprecated), por lo que puedes seguir manteniendo tus EnvironmentKey mientras añades nuevos valores utilizando Entry.

Además de utilizar Entry para EnvironmentValues, también puedes usarlo para crear Transaction Values, ContainerValues y FocusedValues.

Compatibilidad

Entry puede ser utilizada a partir de las siguientes versiones de los sistemas operativos de Apple:

  • iOS 13.0+.
  • iPadOS 13.0+.
  • Mac Catalyst 13.0+.
  • macOS 10.15+.
  • tvOS 13.0+.
  • visionOS 1.0+.
  • watchOS 6.0+.

Conclusión

La macro Entry de SwiftUI te permite simplificar significativamente la creación y gestión de valores personalizados en tu EnvironmentValues. No esperes más para mejorar tu flujo de trabajo y hacer tu código más limpio 😉.

Si no sabes lo que es una macro o quieres aprender a crear una, te recomiendo nuestro artículo sobre cómo crear tu primera macro en Swift.

Comparte este artículo

Subscríbete a nuestro Newsletter

Mantente al día en el mundo de las aplicaciones móviles con nuestro blog especializado.

Artículos semanales

Todas las semanas artículos nuevos sobre el mundo de las aplicaciones móviles.

No spam

No te enviaremos spam, solo contenido de calidad. Puedes darte de baja cuando quieras.

Contenido de calidad

Nada de contenido generado de manera automática usando ChatGPT.

Recomendaciones

Tips indispensables sobre mejores prácticas y metodologías.

© 2024 AsyncLearn