Objetos observables
Parte de la sección Introducción a SwiftUI del Journey de Swift de Coddy. Lección 40 de 50.
Los datos que comparten varias vistas, o que tienen su propia lógica, van en una clase. Esta adopta ObservableObject, y cada propiedad que muestra la pantalla se marca con @Published:
class Cart: ObservableObject {
@Published var count = 0
func add() {
count += 1
}
}La vista que crea el objeto lo almacena con @StateObject. SwiftUI mantiene activo ese único objeto mientras la vista está en pantalla y vuelve a dibujar la vista cada vez que cambia una propiedad publicada:
struct ContentView: View {
@StateObject private var cart = Cart()
var body: some View {
VStack {
Text("Items: \(cart.count)")
Button("Add to cart") {
cart.add()
}
}
}
}Una vista secundaria que recibe un objeto existente de su vista principal lo marca con @ObservedObject en su lugar: observa el objeto, pero no es su propietaria.
Desafío
IntermedioLa clase Scoreboard no está conectada a la pantalla. Conviértela en un ObservableObject con un @Published points, guárdala en ContentView con @StateObject y haz que el botón llame a scoreboard.score(). El texto debe mostrar Points: 10 después de un toque.
Pruébalo tú mismo
import SwiftUI
@main
struct CoddyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Introducción a SwiftUI
2Mostrar contenido
Vistas de textoNúmeros en el textoFuentesColoresSF SymbolsRepaso: etiqueta de precioPractica por tu cuenta: Playground de Swift