iOS中的MVVM示例/示例实现[关闭]

Posted

技术标签:

【中文标题】iOS中的MVVM示例/示例实现[关闭]【英文标题】:MVVM Sample / Example Implementation in iOS [closed] 【发布时间】:2014-11-16 04:25:08 【问题描述】:

是否有人在您的 ios 应用程序中实现了 MVVM 模式而不使用 ReactiveCocoa?

在这里找到了很多示例,但所有示例都使用 Reactive Cocoa。我想要一个简单的 MVVM 实现示例。

【问题讨论】:

您的问题很有趣,但过于宽泛。你有什么考虑?否则,您应该看看这两个博客文章:Swift: Using MVVM To Work With Optionals 和 Introduction to MVVM。您还可以阅读此主题:Rewrite code from Objective-C to conform with Swift power tools and concise style。 Rob Mayoff 给出的出色答案使用了 MVVM 设置。 GitHub 上的另一个 Swift MVVM 示例here。 只有当您有一个可以帮助您进行数据绑定的系统时,您才能从采用 MVVM 中获益。在 iOS 中,这几乎肯定是 KVO 机制。您需要这样做以避免为每个属性编写自己的更改跟踪代码。 ReactiveCocoa 是最成熟的项目,它将 KVO API 与通知和异步流结合在一起,一旦你克服了学习曲线,它就非常强大。我建议不要试图避免它,而是要真正接受它。 captechconsulting.com/blogs/ios-design-patterns-mvc-and-mvvm 看这里:mobiledefense.com/blog/2016/02/07/pure-swift-mvvm 【参考方案1】:

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

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

View Model 知道 View 何时需要更新 - 要么数据已更改,要么您正在通过 Model 发出异步数据请求并且 Model 已加载到 View Model 中。

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

现在,您只需关心如何触发该方法。在我的个人框架中,我利用 KVO 和我的 ViewControllers 监视我的 ViewModel 基类上的时间戳属性。每当我的视图模型更新其基础数据时,其时间戳都会更新,从而触发更新。您可以轻松地将 View Controller 注册为 ViewModel 的更新委托并使用标准委托模式。

同样,MVVM 不是关于具体的实现要求,更多的是关于关注点分离、依赖解耦和封装的更高层次的概念。

【讨论】:

这是一本好书rasic.info/bindings-generics-swift-and-mvvm 我已经非常有效地使用了委托模式。 OP 要求一个简单的例子。

以上是关于iOS中的MVVM示例/示例实现[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

MVVM Light Toolkit 示例 [关闭]

展示如何在 MVVM 应用程序中使用 Avalondock 的示例代码 [关闭]

六从GitHub浏览Prism示例代码的方式入门WPF下的Prism之MVVM中的FilteringEvents

WPF MVVM 对话框示例

用户控件中的Mvvm light SimpleIoC

如何用WPF实现一个最简单的Mvvm示例