2014-09-22 117 views
35

HAs任何人在iOS应用程序中实现了MVVM模式而不使用ReactiveCocoa?iOS中的MVVM示例/示例实现

在这里找到很多例子,但他们都使用反应可可。我想要一个MVVM实现的简单例子。

+2

你的问题是有趣的,但过于宽泛。你有什么考虑?否则,你应该看看这两篇博客文章:[Swift:使用MVVM处理可选项](http://natashatherobot.com/swift-mvvm-optionals/)和[MVVM简介](http:// www.objc.io/issue-13/mvvm.html)。您也可以阅读以下主题:[重写Objective-C中的代码以符合Swift电源工具和简洁的风格](http://codereview.stackexchange.com/questions/62958/rewrite-code-from-objective-c-to -conform与 - 迅速,电力工具和简洁-STYL)。 Rob Mayoff给出的优秀答案使用MVVM设置。 – 2014-10-03 23:57:02

+2

GitHub上的另一个Swift MVVM示例[here](https://github.com/shilgapira/SwiftDemoMVVM)。 – 2014-10-04 13:41:42

+0

如果您的系统可以帮助您进行数据绑定,那么您只能采用MVVM。在iOS中,这几乎肯定会成为KVO机制。您需要这样做才能避免为每个媒体资源编写自己的更改跟踪代码。 ReactiveCocoa是将KVO API与通知和异步数据流统一在一起的最成熟的项目,一旦学习结束后,它将非常强大。我建议不要试图避免它,但实际上要拥抱它。 – fatuhoku 2014-11-15 09:22:26

回答

40

MVVM肯定不需要Reactive Cocoa。我已经构建了一个非常成功的MVVM框架,完全没有任何绑定。绑定不是MVVM的要求。

具体来说,视图模型和视图之间的链接确实要求视图模型向视图发信号通知它需要更新其数据。这可以通过使用Reactive Cocoa,KVO(我非常喜欢Facebook的KVOController),甚至使用简单的委托模式来实现。

视图模型知道视图何时需要更新 - 数据已更改,或者通过模型发出异步数据请求,并且该模型已加载到视图模型中。

设置视图时,可以将每个控件绑定到视图模型上的对应值。我发现,当我需要制作屏幕时,这会变得非常乏味。相反,我宁愿有一个方法,当视图模型指示视图应该自行更新时调用。在那个方法中,我只需要设置我所有的控件属性。

现在,您只需要关心自己如何触发该方法。在我的个人框架中,我利用KVO和ViewControllers监视ViewModel基类的timestamp属性。任何时候,我的视图模型都会更新其基础数据,其更新时间戳会触发更新。您可以轻松地将View Controller注册为ViewModel的更新委托并使用标准的委托模式。另外,MVVM不是关于具体的实现需求,更多的是关于高级关注点分离,依赖关系解耦和封装的概念。

+1

这是一个很好的阅读http://rasic.info/bindings-generics-swift-and-mvvm/ – DogCoffee 2015-03-25 14:30:57

+0

我已经非常有效地使用委托模式。 – SilentNot 2015-12-23 14:59:58

+0

OP请求一个简单的例子。 – nmdias 2016-12-11 09:30:30

1

我创建使用MVVM一个简单的项目:模型 - 视图 - 视图模型

请查看以下链接Github上:

https://github.com/harshal-wani/MVVM-BestPractice

+0

你什么时候想创建/附加你的项目的另一半?数据收集似乎已经完成了一半...... – holex 2017-12-13 10:39:44