Menu
CoddyTech

Đối tượng có thể quan sát

Thuộc phần Giới thiệu về SwiftUI trong hành trình Swift của Coddy. Bài học 40 trên 50.

Dữ liệu mà nhiều khung nhìn cùng chia sẻ hoặc có logic riêng sẽ nằm trong một lớp. Lớp này tuân theo ObservableObject, và mỗi thuộc tính hiển thị trên màn hình đều được đánh dấu bằng @Published:

class Cart: ObservableObject {
    @Published var count = 0

    func add() {
        count += 1
    }
}

Khung nhìn tạo đối tượng sẽ lưu đối tượng đó bằng @StateObject. SwiftUI giữ đối tượng này tồn tại trong khi khung nhìn hiển thị trên màn hình và vẽ lại khung nhìn mỗi khi một thuộc tính được công bố thay đổi:

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

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

Một khung nhìn con nhận một đối tượng có sẵn từ khung nhìn cha sẽ đánh dấu đối tượng đó bằng @ObservedObject: khung nhìn con theo dõi đối tượng nhưng không sở hữu nó.

challenge icon

Thử thách

Trung bình

Lớp Scoreboard chưa được kết nối với màn hình. Hãy biến nó thành một ObservableObject với points có @Published, lưu nó trong ContentView bằng @StateObject và để nút gọi scoreboard.score(). Sau một lần chạm, văn bản phải hiển thị Points: 10.

Tự làm thử

import SwiftUI

@main
struct CoddyApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Giới thiệu về SwiftUI

Tự luyện tập: Playground SwiftUI