Observation para Swift: guia completo com exemplos
1. O que é e para que serve
Observation é um novo framework apresentado pela Apple na WWDC 2023, que reinventa completamente o mecanismo de observação de dados em Swift. Ele substitui o modelo antigo baseado em @Published e ObservableObject do Combine, oferecendo uma abordagem mais performática, thread-safe e intuitiva. No centro do Observation estão o protocolo Observable e o macro @Observable, que permitem rastrear alterações no nível de propriedades individuais, e não do objeto inteiro.
Por que isso é necessário? No desenvolvimento moderno para iOS, macOS, watchOS e tvOS, o principal framework para construir interfaces é o SwiftUI. Para funcionar de forma eficiente, o SwiftUI precisa de um mecanismo que o informe sobre mudanças nos dados, para redesenhar apenas as partes da interface que realmente mudaram. A abordagem antiga com ObservableObject redesenhava a View inteira sempre que qualquer propriedade era alterada, causando cálculos desnecessários e perda de desempenho. O Observation resolve esse problema, garantindo o rastreamento preciso de mudanças no nível de propriedades individuais.
Principais vantagens: o Observation faz parte da biblioteca padrão do Swift (a partir do iOS 17, macOS 14, tvOS 17, watchOS 10), não requer dependências adicionais, é totalmente thread-safe (as alterações podem ser feitas de qualquer thread, e as notificações são entregues na thread principal) e é profundamente integrado ao SwiftUI através do macro @Bindable e do novo modificador .onChange(of:).
2. Instalação
Observation é um framework nativo da Apple. Ele faz parte da biblioteca padrão do Swift a partir da versão Swift 5.9 e Xcode 15. Não é necessária nenhuma instalação adicional via gerenciadores de pacotes (CocoaPods, Swift Package Manager, Carthage).
Para começar a usar o Observation, basta:
- Instalar o Xcode 15 ou superior.
- Nas configurações do projeto, garantir que a versão mínima de implantação (Deployment Target) esteja definida como iOS 17, macOS 14, tvOS 17 ou watchOS 10.
- Importar o framework no arquivo onde você planeja usá-lo:
import Observation.
Se você estiver usando SwiftUI, não é necessário importar Observation separadamente — ele fica automaticamente disponível ao importar SwiftUI.
3. Início rápido — exemplo mínimo funcional
Vamos criar um modelo de dados simples e uma View que o exibe.
import SwiftUI
// 1. Criamos uma classe observável
@Observable
class UserSettings {
var username: String = "Convidado"
var isLoggedIn: Bool = false
}
// 2. Usamos na View
struct ContentView: View {
// @State para gerenciar o ciclo de vida
@State private var settings = UserSettings()
var body: some View {
VStack(spacing: 20) {
Text("Usuário: \(settings.username)")
.font(.title)
TextField("Digite seu nome", text: $settings.username)
.textFieldStyle(.roundedBorder)
.padding()
Toggle("Entrar", isOn: $settings.isLoggedIn)
.padding()
if settings.isLoggedIn {
Text("Você entrou como \(settings.username)")
.foregroundColor(.green)
} else {
Text("Você não está autenticado")
.foregroundColor(.red)
}
}
.padding()
}
}
Neste exemplo, o macro @Observable transforma automaticamente a classe UserSettings em um objeto observável. O SwiftUI detecta as mudanças nas propriedades username e isLoggedIn e atualiza apenas as partes da interface que dependem delas, sem redesenhar a View inteira.
Também na biblioteca
Geração Swagger/OpenAPI para JavaScript (Node.js) — ferramentas e bibliotecas
Trabalhando com S3 e armazenamentos em nuvem em Go: biblioteca minio-go
Internacionalização (i18n) em C# (.NET): guia completo
Laravel Framework para PHP: guia completo com exemplos
clinic.js — Monitoramento de aplicações TypeScript