相关疑难解决方法(0)

SwiftUI:@ObservedObject 重绘每个视图

我尝试在 SwiftUI 中正确实现 MVVM 方式,所以我想出了这个(简化的)模型和 ViewModel:

struct Model {
    var property1: String
    var property2: String
}

class ViewModel: ObservableObject {

    @Published var model = Model(property1: "this is", property2: "a test")

}
Run Code Online (Sandbox Code Playgroud)

在 a 中使用它View效果很好,但我遇到了一些糟糕的性能问题,因为我ViewModel用一些计算属性和一些函数扩展了它(而且它Model本身更复杂)。但让我们继续看这个例子,因为它完美地展示了我认为 SwiftUI 本身的一个大问题。

想象一下,您有这些视图来显示数据:

struct ParentView: View {

    @ObservedObject var viewModel: ViewModel

    var body: some View {
        print("redrawing ParentView")
        return ChildView(viewModel: self.viewModel)
    }
}

struct ChildView: View {

    @ObservedObject var viewModel: ViewModel

    var body: some View {
        print("redrawing ChildView")
        return VStack …
Run Code Online (Sandbox Code Playgroud)

swift swiftui

6
推荐指数
1
解决办法
1717
查看次数

标签 统计

swift ×1

swiftui ×1