Trang chủ

Trạng thái và luồng dữ liệu

Chọn đúng property wrapper

Mọi property wrapper đều trả lời đúng một câu hỏi: ai sở hữu giá trị này, và ai được phép đổi nó?

Wrapper Chủ sở hữu Dùng cho
@State chính view này trạng thái kiểu giá trị mà riêng view này giữ
@Binding người khác một tay cầm hai chiều được truyền xuống
@Observable / @Bindable một kiểu tham chiếu đối tượng mô hình dùng chung nhiều view
@Environment môi trường giá trị được truyền xuống ngầm
@Observable
final class Cart {
    var items: [Item] = []
    var total: Decimal { items.reduce(0) { $0 + $1.price } }
}

struct CartView: View {
    @Environment(Cart.self) private var cart

    var body: some View {
        List(cart.items) { ItemRow(item: $0) }
    }
}

@Observable đã thay cho ObservableObject@Published: thay vì cả đối tượng thông báo có thay đổi, SwiftUI theo dõi xem view thật sự đọc những thuộc tính nào rồi chỉ vẽ lại đúng những view đã đọc thuộc tính vừa đổi. Một view liệt kê items sẽ không vẽ lại khi thứ khác thay đổi.

Đây là chương mẫu. Phần nội dung đầy đủ vẫn đang được viết.