问题重现
@State不生效
struct ProductDetailView: View {
@State private var product: ProductModel
init(refId: String) {
let mProduct = AppLocalAPI.findProduct(refId: refId)
_product = State(initialValue: mProduct)
}
var body: some View {
....
}
}
// 外部调用
ProductDetailView(refId: ...)
该代码是,传入一个id给view,view通过数据库获取商品信息,赋值到 state 变量。
实际运行会发现,只有第一次传入的id才生效。
后续的 _product = State(initialValue: mProduct) 赋值都没有使得界面刷新
解决方法
改用 @ObservedObject,把 product 放到class里面。
struct ProductDetailView: View {
class ViewModel: ObservableObject {
@Published var product = ProductModel(refId: "", retailPrice: 0, tradePrice: 0)
init(refId: String) {
product = AppLocalAPI.findProduct(refId: refId) ?? product
}
}
@ObservedObject var vm: ViewModel
var body: some View {
....
}
}
// 外部调用
ProductDetailView(vm: ...)