其他分享
首页 > 其他分享> > SwiftUI View初始化复杂数据

SwiftUI View初始化复杂数据

作者:互联网

问题重现

@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: ...)

原理

https://onevcat.com/2021/01/swiftui-state/

标签:初始化,product,State,SwiftUI,var,ProductDetailView,refId,View
来源: https://www.cnblogs.com/ZJT7098/p/16392514.html