在iOS中查看模型验证
在上一篇文章中,我谈到了如何为iOS实现MVVM体系结构。 在这篇文章中,我将说明在将MVVM体系结构用于iOS应用程序时如何执行验证。
我们将在允许用户设置新密码的屏幕上工作。 下面的屏幕快照显示了屏幕的用户界面。
更改密码屏幕由“ ChangePasswordViewModel ”控制,该实现如下:
这是我们需要考虑的一些验证规则。
- 密码长度至少为8个字符
- 密码需要匹配
ChangePasswordTableViewController利用ChangePasswordViewModel为视图提供数据。 从文本字段到视图模型属性的方向绑定是在视图控制器内部设置的,如下所示:
每当您更改文本字段中的值时,视图模型就会自动更新,其中包含文本字段中的最新值。 现在,我们需要执行实际验证。 可以在保存操作内部的视图控制器中实现此操作,如下所示:
不要那样做!
您不希望视图控制器中包含验证逻辑。 这使得视图控制器的代码本来就不需要在这里膨胀。
解决此问题的一种方法是允许视图模型进行自我验证。
理想情况下,您将实现一个验证引擎类,其职责是验证视图模型。 验证引擎是自定义属性的偶像用例。 不幸的是,Swift当前不支持自定义属性。
每个坏规则将由以下实现的BrokenRule类表示:
ViewModel协议定义协议,该协议由brokenRules集合和isValid布尔属性组成。
ChangePasswordViewModel符合ViewModel协议并实现validate函数,如下所示:
验证功能执行所有验证。 同样,最好有一个单独的验证引擎类来执行所有与验证有关的任务。
isValid属性将重置规则集合,然后调用私有验证功能。 最后,它取决于破碎规则列表是否包含任何破坏的规则而返回true或false。
现在,视图控制器可以使用以下代码来验证视图模型:
让我们测试一下。 运行该应用程序,然后为新密码输入以下值并确认密码,然后尝试保存/更新密码。
新密码=保留空白
确认密码=保留空白
视图模型将无效,您将在输出窗口上看到以下消息。
[Headlines.BrokenRule(propertyName:“ newPassword”,消息:“ Password应该至少包含8个字符”))
新密码= password123
确认密码= password345
[Headlines.BrokenRule(属性名称:“ confirmPassword”,消息:“密码不匹配”))]
我确实希望在Swift的未来版本中可以实现自定义属性。 使用自定义属性,我们的视图模型将如下所示简单:
显然,您仍然需要为“ Required”属性创建实现,但是我相信它将从视图模型中删除很多不必要的代码。 所有验证逻辑将移至ValidationEngine类,该类将根据修饰后的属性动态验证视图模型,并返回中断规则列表。
编程愉快!
您可以在此处下载代码:
azamsharp / HeadlinesMVVM
通过在GitHub上创建一个帐户为HeadlinesMVVM开发做出贡献。 github.com
另外,我有关Udemy的所有课程现在都在销售中。 您只需花10美元即可获得一门课程。 查看以下交易:
生日快乐-优惠券内有95%的折扣
大家好, medium.com