Đối tượng môi trường
Thuộc phần Giới thiệu về SwiftUI trong hành trình Swift của Coddy. Bài học 41 trên 50.
Truyền một đối tượng qua từng khung nhìn cho đến khung nhìn cần dùng sẽ trở nên rườm rà. Thay vào đó, hãy đặt đối tượng vào môi trường, rồi mọi khung nhìn bên dưới đều có thể đọc đối tượng đó:
@StateObject private var cart = Cart()
var body: some View {
NavigationStack {
ShopView()
}
.environmentObject(cart)
}Một view ở phần bên dưới khai báo những gì nó cần bằng @EnvironmentObject, mà không có giá trị ban đầu:
struct CartBadge: View {
@EnvironmentObject var cart: Cart
var body: some View {
Text("\(cart.count) in cart")
}
}ShopView không nhắc đến giỏ hàng, nhưng CartBadge bên trong vẫn nhận được cùng một đối tượng. Nếu không có view nào phía trên cung cấp đối tượng đó bằng .environmentObject, ứng dụng sẽ dừng và báo lỗi khi CartBadge hiển thị.
Thử thách
Trung bìnhCartBadge cần hiển thị số lượng sản phẩm trong giỏ hàng dùng chung. Truyền cart vào VStack bằng .environmentObject, rồi sửa CartBadge để đọc giá trị này bằng @EnvironmentObject. Sau một lần chạm, huy hiệu phải hiển thị 1 in cart.
Tự làm thử
import SwiftUI
@main
struct CoddyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}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
6Nhập dữ liệu người dùng
Trường văn bảnCông tắcBộ tăng giảm và thanh trượtBộ chọnÔn tập: biểu mẫu đặt hàng9Chia sẻ dữ liệu
Thuộc tính @BindingĐối tượng có thể quan sátĐối tượng môi trườngÔn tập: bộ đếm bước chânTự luyện tập: Playground SwiftUI