可观察对象
本课属于 Coddy Swift 学习旅程的“SwiftUI 入门”单元。第 40 课,共 50 课。
多个视图共享的数据,或有自身逻辑的数据,应放在类中。它遵循 ObservableObject,屏幕显示的每个属性都标记为 @Published:
class Cart: ObservableObject {
@Published var count = 0
func add() {
count += 1
}
}创建对象的视图会使用 @StateObject 保存它。视图显示在屏幕上时,SwiftUI 会让这个对象保持存活,并在已发布的属性发生变化时重新绘制视图:
struct ContentView: View {
@StateObject private var cart = Cart()
var body: some View {
VStack {
Text("Items: \(cart.count)")
Button("Add to cart") {
cart.add()
}
}
}
}从父视图接收现有对象的子视图则将其标记为 @ObservedObject:它会监视该对象,但不拥有该对象。
挑战
中等Scoreboard 类没有与屏幕连接。让它成为一个 ObservableObject,并包含一个 @Published 的 points,使用 @StateObject 将它存储在 ContentView 中,并让按钮调用 scoreboard.score()。点击一次后,文本必须显示 Points: 10。
亲手试试
import SwiftUI
@main
struct CoddyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
SwiftUI 入门中的所有课
自己练习: SwiftUI 在线编辑器