我遇到的大多数Swift MVVM示例都使用依赖注入将Model注入ViewModel,然后将ViewModel注入ViewController。通常建议在AppDelegate中将此注入作为单例进行处理。这对于简单的例子来说都很好。
然而在现实世界中,"模型"实际上,它不仅仅是一个DTO对象,它还假设了Business&返回模型/ DTO的数据层。因此,将模型注入AppDelegate级别的ViewModel是不现实的,因为View / ViewController将触发实际的数据刷新。所以模型注入需要在其他地方进行。
此外,大多数示例直接从ViewModel转到DataAccess,这导致ViewModel接受了大量业务逻辑,理想情况下它应该只保存视图的状态。
有人可以推出一个全面的端到端Swift MVVM示例,其中包含离散分离的Business&数据层。为了保持这个问题不是基于意见而是问题/答案格式,这个例子应该有:
这个例子也应该清楚地说明:
答案 0 :(得分:0)
视图模型应该是协议。协议在Swift中非常强大,它们使组件尽可能地分离。这也便于测试。这是一个微不足道的例子:
// the view model
protocol ArticleDisplayable {
func getTitle() -> String
}
// A model
struct News: ArticleDisplayable {
let newsTitle: String
func getTitle() -> String {
return newsTitle
}
}
// Another model
struct BlogPost: ArticleDisplayable {
let postTitle: String
func getTitle() -> String {
return postTitle
}
}
您可以采用与模型和其他组件(网络,JSON解析,视图控制器,集合视图单元等)之间的所有其他交互类似的方式继续。基本上,其他组件只会处理ArticleDisplayable对象,并且不会与任何模型耦合。