我尝试在 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)