带有RxSwift的MVVM:用户登录

您是否厌倦了使用相同的旧MVC架构模式来开发iOS应用程序,并且足够开放以尝试新的模式,所以嘿! 你是在正确的地方。

注意 :如果您不知道RxSwift是什么,那么我建议您通读我以前的文章,它将带您了解RxSwift的一些非常基础的知识,以便您对我在本文中要解释的代码感到满意。

RxSwift:观察运算符✅

如果您来自编程背景或具有某种专业知识,那么您一定一定会遇到……

medium.com

现在,我假设您对RxSwift的功能以及如何使用它有一些基本的了解。 因此,现在继续前进,在深入研究一些编码之前,请先讨论MVVM(模型-视图-ViewModel)体系结构。

MVVM与MVC非常相似。 它描绘了视图和控制器的紧密耦合本质,并引入了一个新组件。

在MVVM下,View和ViewController彼此紧密相连,我们将它们视为一体。 视图仍然没有直接引用模型,控制器也没有。 相反,他们引用了新组件ViewModel

ViewModel 是放置您所有用于用户输入的验证逻辑,用于视图的呈现逻辑,任何网络请求的发起以及其他各种代码的绝佳场所。 不属于ViewModel的一件事是对视图本身的任何直接引用。 ViewModel中的逻辑在iOS上应与在OS X上一样适用。(换句话说,不要在视图模型中#import UIKit.h,就可以了。)

由于表示逻辑(如将模型值映射到格式化的字符串)属于ViewModel,因此ViewController本身变得far肿得多,代码行数少了。 最好的部分是,当您开始使用MVVM时,您只能在ViewModel中放置少量代码逻辑,当您对范式更加满意时,可以将更多的代码逻辑迁移到它们上。

使用MVVM编写的iOS应用程序具有很高的可测试性。 由于视图模型包含所有表示逻辑并且不引用视图,因此可以通过编程对其进行全面测试。 从理论上讲,现在是时候让我们掌握一些代码示例了,这将使您快速了解如何有效实施MVVM。

  • LoginModel是一个存储登录凭据(即用户名和密码)的类。

LoginViewModel:

  • 这是主要的ViewModel,它实际上处理Login视图上的所有用户交互。
  • 在这里,我们创建了密码和电子邮件视图模型的实例,还定义了可观察对象,即将 变量绑定 isSuccess,isLoading,errorMsg ,并将其绑定到视图以进行响应数据更改。
  • validateCrentials()函数中,我们实际上通过调用相应的ViewModel函数来比较字段值。
  • 最后, loginUser()使用值初始化模型,然后创建对包含电子邮件,密码的api的请求,最后启动API请求。 无论是成功还是失败响应,我们都会更新我们之前在案例中定义的可观察对象isLoading,isSuccess,errorMessage ,它们使用绑定立即反映在视图中,从而使其具有反应性。
  • 现在,最后我们进入视图,即ViewController,其中ViewModel以反应方式反映数据。
  • createViewModelBinding函数中,我们将电子邮件和密码字段与各自的ViewModel的数据变量绑定在一起,简而言之,将文本字段的文本和数据变量值保持同步。 因此,当电子邮件文本字段的值更改时,数据变量值也会更改。
  • 登录按钮的点击监听器首先通过self.emailTextField.resignFirstResponder()关闭键盘然后验证凭据并相应地调用loginUser函数进行处理。
  • createCallbacks函数中,我们订阅了isSuccesserrorMsg可观察的对象,因此,如果其值发生任何更改,我们都将在View中进行回调,并可以执行该过程。

到此为止,希望您能从中学到一些有用的东西。 因此,如果您有任何想法和意见,请随时在下面发表评论。 别忘了通过多次鼓掌来分享您的爱。

您可以在 Twitter,Github,LinkedIn,Facebook 上关注我

快乐编码👨‍💻。