Menu
Coddy logo textTech

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.

challenge icon

Desafío

Intermedio

La 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()
        }
    }
}
quiz iconPonte a prueba

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

Practica por tu cuenta: Playground de Swift