SwiftUI是最简单的MVVM

SwiftUI是最简单的MVVM,mvvm,swiftui,Mvvm,Swiftui,作为一种学习练习,我尝试为SwiftUI构建最简单的模型视图模型(MVVM)。结果如下。我的问题是:这段代码是最短的mvvm还是您可以让它更简单、更短 // Model import Foundation struct SimplestModel <Content> { var mItem: String init() {mItem = ""} } // View Model import SwiftUI class Portal {

作为一种学习练习,我尝试为SwiftUI构建最简单的模型视图模型(MVVM)。结果如下。我的问题是:这段代码是最短的mvvm还是您可以让它更简单、更短

// Model

import Foundation

struct SimplestModel <Content> {
   var mItem: String
   init() {mItem = ""}
}

// View Model

import SwiftUI

class Portal {

   private var model : SimplestModel<String> = Portal.setContent()

   static func setContent() -> SimplestModel<String>{
       return SimplestModel<String>.init()
}

func getString() -> String {
    model.mItem = "Portal"
    return model.mItem
  }

}

// View

struct ContentView: View {

  var viewModel: Portal

  var body: some View {
      Text(viewModel.getString())
  }
}
//模型
进口基金会
结构简单模型{
var-mItem:String
init(){mItem=”“}
}
//视图模型
导入快捷键
类门户{
私有变量模型:SimplestModel=Portal.setContent()
静态func setContent()->SimplestModel{
返回SimplestModel.init()
}
func getString()->String{
model.mItem=“门户”
返回模型
}
}
//看法
结构ContentView:View{
var视图模型:门户
var body:一些观点{
文本(viewModel.getString())
}
}

在您的情况下,
ContentView
不会在模型(或视图模型)更改时更新。如果您想完全隐藏模型(当然仍然需要刷新视图),这里是一种可能的方法

注意:我不认为在这种情况下需要泛型

struct SimplestModel {
    var mItem: String = ""
}

// View Model

import SwiftUI

class Portal: ObservableObject {
    @Published var name: String {
        didSet {
            if name != model.mItem {  // avoid cycling
                model.mItem = name
            }
        }
    }

    private var model: SimplestModel {
        didSet {
            if name != model.mItem {    // avoid cycling
                name = model.mItem
            }
        }
    }

    init(model: SimplestModel = SimplestModel()) {
        self.model = model
        self.name = model.mItem
    }
}

// View

struct DemoContentView: View {

    @ObservedObject var viewModel: Portal

    var body: some View {
        Text(viewModel.name)
    }
}