Menu
Coddy logo textTech

Objetos observáveis

Parte da seção Introdução ao SwiftUI do Journey de Swift da Coddy. Lição 40 de 50.

Os dados que várias telas compartilham, ou que têm sua própria lógica, ficam em uma classe. Ela está em conformidade com ObservableObject, e cada propriedade exibida pela tela é marcada com @Published:

class Cart: ObservableObject {
    @Published var count = 0

    func add() {
        count += 1
    }
}

A view que cria o objeto o armazena com @StateObject. O SwiftUI mantém esse objeto ativo enquanto a view está na tela e redesenha a view sempre que uma propriedade publicada é alterada:

struct ContentView: View {
    @StateObject private var cart = Cart()

    var body: some View {
        VStack {
            Text("Items: \(cart.count)")
            Button("Add to cart") {
                cart.add()
            }
        }
    }
}

Uma view filha que recebe um objeto existente de sua view pai o marca com @ObservedObject: ela observa o objeto, mas não é sua proprietária.

challenge icon

Desafio

Médio

A classe Scoreboard não está conectada à tela. Faça dela um ObservableObject com um @Published points, armazene-a em ContentView com @StateObject e faça o botão chamar scoreboard.score(). O texto deve exibir Points: 10 após um toque.

Experimente você mesmo

import SwiftUI

@main
struct CoddyApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Introdução ao SwiftUI

Pratique por conta própria: Playground de Swift