【发布时间】:2020-10-18 17:00:58
【问题描述】:
我正在尝试实现类似 MVC 的设计模式,以实现代码不同部分之间的低耦合。网上很少有关于 IOS 或 swift UI 开发和 MVC 模式的资料我个人认为没有帮助。
我想了解的是控制器类应该如何在 Swift UI 中控制或渲染 UI?
例如遵循 MVC 模式 - 视图不应该知道模型的外观,因此将对象从数据库发送回视图以直观地呈现它不是一个好主意。
假设我们有下面的View和Controller,当从DB发回数据时,我应该如何处理控制器和视图之间的交互,以便在视图中直观地呈现它?
查看:
import SwiftUI
import Foundation
struct SwiftUIView: View {
var assignmentController = AssignmentController()
@State var assignmentName : String = ""
@State var notes : String = ""
var body: some View {
NavigationView {
VStack {
Form {
TextField("Assignment Name", text: $assignmentName)
TextField("Notes", text: $notes)
}
Button(action: {
self.assignmentController.retrieveFirstAssignment()
}) {
Text("Get The First Assignment !")
}
}
.navigationBarTitle("First Assignment")
}
}
}
控制器
var assignmentModel = AssignmentModel()
func retrieveFirstAssignment()
{
var firstAssignment : Assignment
firstAssignment=assignmentModel.retrieveFirstAssignment()
}
目前,它对找到的对象什么都不做。
型号
模型中的一个对象由两个 String 字段组成:“assignmentName”和“notes”。
*我们假设分配模型有一个工作函数,它从数据库中检索一个任务,以便在视图中呈现它。
【问题讨论】:
-
谢谢。这正是我的问题,您应该如何与视图进行交互,因为视图不应该知道模型的外观。这就是为什么我暂时不使用它的原因。
-
当然可以使用几乎任何你想要的设计模式,但你考虑过 MVVM 吗?它似乎比 MVC 和 Apple 在他们的教程系列中自己采用它更适合 SwiftUI 做事。
-
我也对 MVVM 持开放态度,但在这种情况下,我的问题仍然是如何在 View Model 和 View 之间建立适当的绑定连接。
-
ObservableObject/ObservedObject.
-
如果有人可以使用我使用的演示类(用视图模型替换控制器)提供基本代码示例,将不胜感激
标签: ios swift model-view-controller design-patterns swiftui