SwiftUI最简单的MVVM



作为一种学习练习,我尝试为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())
}
}

在您的情况下,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)
}
}

最新更新