我现在和MVVM以及Swift一起工作了一段时间。原理很简单:
期。
对我来说很清楚。但是我仍然有一些问题(它们可能听起来很愚蠢,但对新手来说,与上述规则一样清楚很重要):
struct
吗?这是一个棘手的问题。我猜测ViewModel也应该为ViewController提供一个与数据交互的API。因此,有时我们需要使用一些 escaping closures 来获取异步数据(例如HTTP调用)。结构无法控制它。UIPageControl
的当前页面)。 ViewController应该持有这个引用吗?如果你们能分享你们的解决方案,我会很高兴的。谢谢!
答案 0 :(得分:1)
你的问题非常广泛。有人肯定会比我更广泛地解释它,或者可能有不同的意见。但这些是我的观察:
1。是ViewModel应该是处理业务逻辑的唯一组件
2。我猜你自己回答了,它应该是class
。我没有任何理由说明原因struct
。但是,如果符合您的需求,我可以说。
3. 取决于使用情况。如果你将它用于视图的目的,那么可以在这里使用它。对于较小的部件,还存在一个单独的ViewModel的概念,遗憾的是,不知道名称。我的意思是你有一个用于整个视图的主ViewModel和用于子视图的subViewModel。因此,您最终不会在ViewModel
中拥有大量代码。有时它也是可接受的技术债务(希望不会因为这样说而杀了我)
4。就是这样。您将按此按钮,您将调用名为ViewModel
的{{1}}中的方法(或触发事件)。然后你的buttonPressed
将完成它的工作,可能会获得一个新数据并为此设置视图。从我所看到的情况来看,您可以通过在ViewModel
中对View
进行弱引用,或在视图中绑定反应属性来实现。第二个选项不需要在ViewModel
中使用View
,但您必须为ViewModel
的每个视图设置属性注册观察者。