Observation Swift : guide complet avec exemples concrets
1. Qu'est-ce que c'est et pourquoi l'utiliser ?
Observation est un nouveau framework présenté par Apple lors de la WWDC 2023, qui réinvente complètement le mécanisme d'observation des données en Swift. Il remplace l'ancien modèle basé sur @Published et ObservableObject de Combine, en offrant une approche plus performante, thread-safe et intuitive. À la base d'Observation se trouvent le protocole Observable et la macro @Observable, qui permettent de suivre les modifications au niveau des propriétés individuelles, et non de l'objet entier.
Pourquoi en avez-vous besoin ? Dans le développement moderne pour iOS, macOS, watchOS et tvOS, SwiftUI est le framework principal pour construire des interfaces. Pour fonctionner efficacement, SwiftUI a besoin d'un mécanisme qui l'informe des changements de données afin de ne redessiner que les parties de l'interface qui ont réellement changé. L'ancienne approche avec ObservableObject redessinait l'intégralité de la vue lors de la modification d'une propriété, entraînant des calculs redondants et une baisse des performances. Observation résout ce problème en assurant un suivi précis des changements au niveau des propriétés individuelles.
Avantages clés : Observation fait partie de la bibliothèque standard Swift (à partir d'iOS 17, macOS 14, tvOS 17, watchOS 10), ne nécessite aucune dépendance supplémentaire, est entièrement thread-safe (les modifications peuvent être effectuées depuis n'importe quel thread, et les notifications sont délivrées sur le thread principal) et est étroitement intégré à SwiftUI via la macro @Bindable et le nouveau modificateur .onChange(of:).
2. Installation
Observation est un framework intégré d'Apple. Il fait partie de la bibliothèque standard Swift à partir de Swift 5.9 et Xcode 15. Aucune installation supplémentaire via des gestionnaires de paquets (CocoaPods, Swift Package Manager, Carthage) n'est nécessaire.
Pour commencer à utiliser Observation, il suffit de :
- Installer Xcode 15 ou une version ultérieure.
- Dans les paramètres du projet, vérifier que la version de déploiement minimale (Deployment Target) est définie sur iOS 17, macOS 14, tvOS 17 ou watchOS 10.
- Importer le framework dans le fichier où vous prévoyez de l'utiliser :
import Observation.
Si vous utilisez SwiftUI, il n'est pas nécessaire d'importer Observation séparément — il est automatiquement disponible lors de l'import de SwiftUI.
3. Démarrage rapide — un exemple fonctionnel minimal
Créons un modèle de données simple et une vue qui l'affiche.
import SwiftUI
// 1. Création d'une classe observable
@Observable
class UserSettings {
var username: String = "Invité"
var isLoggedIn: Bool = false
}
// 2. Utilisation dans une vue
struct ContentView: View {
// @State pour gérer le cycle de vie
@State private var settings = UserSettings()
var body: some View {
VStack(spacing: 20) {
Text("Utilisateur : \(settings.username)")
.font(.title)
TextField("Entrez votre nom", text: $settings.username)
.textFieldStyle(.roundedBorder)
.padding()
Toggle("Connecté", isOn: $settings.isLoggedIn)
.padding()
if settings.isLoggedIn {
Text("Vous êtes connecté en tant que \(settings.username)")
.foregroundColor(.green)
} else {
Text("Vous n'êtes pas authentifié")
.foregroundColor(.red)
}
}
.padding()
}
}
Dans cet exemple, la macro @Observable transforme automatiquement la classe UserSettings en un objet observable. La vue SwiftUI utilise @State pour gérer le cycle de vie de l'instance et se met à jour automatiquement lorsque les propriétés username ou isLoggedIn changent.