SwiftUI是最简单的MVVM
作为一种学习练习,我尝试为SwiftUI构建最简单的模型视图模型(MVVM)。结果如下。我的问题是:这段代码是最短的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 {
// 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)
}
}