使用Swift 3的IOS中的MVVM

当我们为最新的iOS应用程序奠定基础时,想向我们以前的iOS应用程序学习。 我们设定了两个目标:

  • 避免Massive View Controller综合症
  • 尽可能少的重复代码

iOS中的MVVM

自从最近出现更好的架构模式以来,MVC(模型视图控制器)设计模式就已经失去了其作为实际模式的地位。 现在,MVC被臭名昭著地称为Massive(或Messy)-View-Controller模式,其原因是在View控制器中堆积1000行以上的代码非常容易。 甚至苹果公司也以避开其示例代码中的MVC模式而闻名。 MVVM(模型-视图-视图模型)是一种体系结构模式,是MVC的替代方案,它可以使将ViewController的UI特定职责进一步隔离到视图模型变得更加容易。

在MVVM设计模式中, 模型与在MVC模式中相同,它表示简单数据。

视图UIViewUIViewController对象以及它们的.storyboard.storyboard文件表示,它们仅应显示准备好的数据。

ViewModel隐藏所有异步联网代码,用于可视表示的数据准备代码以及用于侦听Model更改的代码。 所有这些都隐藏在精心定义的API后面,该API建模为适合该特定View

使用MVVM的好处之一是测试,您可以在单元测试中更轻松地对其进行测试,而不会影响UI代码。

现在, 视图UIViewController / UIView )变得更加简单,而ViewModel充当ModelView之间的粘合剂

在iOS Swift3中应用MVVM

如果您不熟悉MVVM,并且想深入了解如何在应用程序中实现和使用MVVM设计模式,请深入阅读本文,并附带示例示例。

我们将在此示例上演示iOS MVVM模式的用法。 简短地说,该应用程序显示一个用户列表,每个列表包含一个用户图像,其名称和电子邮件。

示例项目中使用的库:

  • Alamofire:是一个用Swift(版本4.4)编写的HTTP网络库。
  • SDWebImage:该库提供了具有缓存支持的异步图像下载器。
  • Mapper:是一个简单的Swift库,用于将JSON转换为强类型对象。

步骤1:设定APIClient

RANDOM USER GENERATOR使用的API,不需要密钥和授权令牌。端点是:http://api.randomuser.me/?results=10&nat=e

我编写了一个具有完成处理程序的downloadUser函数 。 JSON数据将以字典数组的形式返回,用于下面的关键“结果”。

步骤2:设置ViewModel。

#1:我创建了从NSObject继承的UserViewModel文件。 这将是我的View Controller中的属性,并由情节提要注入。

#2创建一个标记为@IBOutletapiClient属性,该属性将由情节提要实例化。 因为我知道情节提要将注入它,所以我可以使用(!)bang运算符,因为我知道它不会为零。

第3步:设置视图控制器。

@IBOutlet声明UserViewModel属性,情节提要将实例化此ViewModel对象。

ViewDidAppear:在视图出现后调用-是使用userViewModel属性从API开始加载用户的好地方。

从API下载数据后,重新加载tableView以显示我们检索到的应用程序对象。

步骤4:如何使用情节提要定义Object属性。

从对象库中,将一个对象项目拖到视图控制器上,并将其插入VC的顶部。

选择视图控制器顶部的对象。

将此Object类设置为您创建的UserViewModel.swift文件。

按住Control键并从View Controller顶部的UserViewModel对象拖动到在ViewController.swift文件中创建的userViewModel @IBOutlet。

结论

总而言之,在iOS中使用MVVM设计模式绝对是正确的方法。 我非常感谢一个好的结构MVVM,当您的应用程序中存在缺陷并且您确切地知道要去哪里修复它并且尽可能少地重复代码时,它将更容易测试代码

源代码

在这里您可以下载示例应用程序项目

AhmadShubita / MVVM-IOS-Swift3
通过在GitHub上创建一个帐户为MVVM-in-IOS-with-Swift3开发做出贡献。 github.com