Observation en Swift: guía completa con ejemplos prácticos
1. ¿Qué es y para qué sirve?
Observation es un nuevo framework presentado por Apple en la WWDC 2023 que redefine completamente el mecanismo de observación de datos en Swift. Reemplaza el modelo obsoleto basado en @Published y ObservableObject de Combine, ofreciendo un enfoque más eficiente, seguro para subprocesos e intuitivo. En el corazón de Observation se encuentran el protocolo Observable y el macro @Observable, que permiten rastrear cambios a nivel de propiedades individuales, no de todo el objeto.
¿Por qué es necesario? En el desarrollo moderno para iOS, macOS, watchOS y tvOS, el framework principal para construir interfaces es SwiftUI. Para funcionar de manera eficiente, SwiftUI necesita un mecanismo que le notifique los cambios en los datos para redibujar solo las partes de la interfaz que realmente cambiaron. El enfoque anterior con ObservableObject redibujaba toda la vista al modificar cualquier propiedad, lo que generaba cálculos innecesarios y menor rendimiento. Observation resuelve este problema al proporcionar un seguimiento preciso de los cambios a nivel de propiedades individuales.
Ventajas clave: Observation es parte de la biblioteca estándar de Swift (desde iOS 17, macOS 14, tvOS 17, watchOS 10), no requiere dependencias adicionales, es completamente seguro para subprocesos (puedes hacer cambios desde cualquier hilo y las notificaciones se entregan en el hilo principal) y está estrechamente integrado con SwiftUI a través del macro @Bindable y el nuevo modificador .onChange(of:).
2. Instalación
Observation es un framework integrado de Apple. Forma parte de la biblioteca estándar de Swift a partir de la versión Swift 5.9 y Xcode 15. No se requiere ninguna instalación adicional a través de gestores de paquetes (CocoaPods, Swift Package Manager, Carthage).
Para empezar a usar Observation, solo necesitas:
- Instalar Xcode 15 o superior.
- En la configuración del proyecto, asegurarte de que la versión mínima de despliegue (Deployment Target) sea iOS 17, macOS 14, tvOS 17 o watchOS 10.
- Importar el framework en el archivo donde planees usarlo:
import Observation.
Si usas SwiftUI, no es necesario importar Observation por separado, ya que está disponible automáticamente al importar SwiftUI.
3. Inicio rápido — ejemplo mínimo funcional
Vamos a crear un modelo de datos simple y una vista que lo muestre.
import SwiftUI
// 1. Creamos una clase observable
@Observable
class UserSettings {
var username: String = "Invitado"
var isLoggedIn: Bool = false
}
// 2. La usamos en una vista
struct ContentView: View {
// @State para gestionar el ciclo de vida
@State private var settings = UserSettings()
var body: some View {
VStack(spacing: 20) {
Text("Usuario: \(settings.username)")
.font(.title)
TextField("Escribe tu nombre", text: $settings.username)
.textFieldStyle(.roundedBorder)
.padding()
Toggle("Iniciar sesión", isOn: $settings.isLoggedIn)
.padding()
if settings.isLoggedIn {
Text("Has iniciado sesión como \(settings.username)")
.foregroundColor(.green)
} else {
Text("No has iniciado sesión")
.foregroundColor(.red)
}
}
.padding()
}
}
En este ejemplo, el macro @Observable transforma automáticamente la clase UserSettings en un objeto observable. SwiftUI detecta los cambios en las propiedades username e isLoggedIn y actualiza solo las partes de la interfaz que dependen de ellas, sin redibujar toda la vista.
También en la biblioteca
toml++ para C++: guía completa con ejemplos prácticos
Autorización y autenticación en C# (.NET): guía completa
Análisis de HTML en C# (.NET): revisión de bibliotecas y ejemplos de código
Configuración de aplicaciones PHP: bibliotecas y herramientas para gestionar ajustes
Envío de SMS en Java: Resumen y ejemplos de uso de bibliotecas API (Twilio, Nexmo)