栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

iOS:如何使用MVVM在视图模型之间传递模型?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

iOS:如何使用MVVM在视图模型之间传递模型?

这个问题与RxSwift或MVVM vs MVC无关。这是一个Class vs
Struct问题。(请注意,当模型是结构时,您的注释“使用MVC,因为视图可以引用模型,因此很容易做到”是不正确的,因为您不能将引用传递给结构。)

您如何解决此问题完全取决于您如何从视图控制器过渡到视图控制器。

当视图控制器负责过渡时。

当视图控制器负责过渡时,每个视图控制器将负责制作下一个视图控制器,而每个视图模型将负责制作下一个视图模型。通过使“父”视图模型侦听“子”视图模型(通过委托,回调闭包或可观察的响应)来完成传递回模型。

通过直接创建并呈现下一个视图控制器,或者到达其容器视图控制器(例如导航VC)并告诉其进行转换,视图控制器可以通过segue或“老式方式”进行转换。

由协调员负责过渡。

过渡的新趋势是让协调器类代替视图控制器来处理它。使用此想法,协调器保存模型,并根据需要创建视图控制器。然后,视图模型与协调器对话,而不是(可能创建并)彼此对话。这样,视图控制器便彼此独立。

您可以使视图模型使用委托,闭包回调或Rx Observables与协调器进行对话。


根据您的修改进行更新:

您问拥有它是否不正确

let vc2 = ViewController2(); vc2.viewModel.car =car
。答案是肯定的,那是不正确的,但是很接近。

如果视图控制器负责过渡,那么您将看到的是:

// in view controller 1let vc2 = ViewController2()vc2.viewModel = self.viewModel.viewModel2

如果使用协调器,则会看到类似以下内容的信息:

// in coordinatorlet vm2 = ViewModel(car: self.car)let vc2 = ViewController2(viewModel: vm2)

视图模型背后的关键思想不是私有的,不必一定是私有的。关键思想是它是视图控制器持有的唯一非视图对象。您可以将其视为“模型控制器”。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/393343.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号