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.
Desafio
MédioA 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()
}
}
}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
4Modificadores
PreenchimentoPlanos de fundoOrdem dos modificadoresMolduras e formasRecapitulação - Criador de distintivos10Projeto - Coddy Coffee
Visão geral do projetoTelas de bebidas5Estado e Botões
BotõesA Propriedade @StateEstado Verdadeiro ou FalsoViews CondicionaisRecapitulação - Marcador de Pontos6Entrada do Usuário
Campo de TextoAlternânciaControle Deslizante e IncrementalSeletorRevisão - Formulário de Pedido9Compartilhando Dados
A propriedade @BindingObjetos observáveisObjetos de ambienteRecapitulação — Contador de passosPratique por conta própria: Playground de Swift