Tag: 杂项

笨拙的UI是一个好的UI:在iOS中使用Swift的MVP

由Mohamed Iyad Tamer Agha撰写 在开发iOS应用程序时,Model-View-Controller是一种常见的设计模式。 通常,视图层由以编程方式定义或在xib文件中定义的UIKit元素组成,模型层包含应用程序的业务逻辑,而由UIViewController类表示的控制器层则是模型和视图之间的粘合剂。 这种模式的一个很好的部分是将业务逻辑和业务规则封装在模型层中。但是,UIViewController仍然包含与UI相关的逻辑,这意味着: 调用业务逻辑并将结果绑定到视图 管理视图元素 将来自模型层的数据转换为UI友好格式 导航逻辑 管理UI状态 和更多 … 承担所有这些责任,ViewController经常变得庞大,并且难以维护和测试。 因此,现在该考虑改进MVC来解决这些问题了。 我们将此改进称为模型视图演示者MVP。 MVP模式是由Mike Potel于1996年首次提出的,多年来讨论了多次。 Martin Fowler在他的GUI体系结构文章中讨论了这种模式,并将其与其他用于管理UI代码的模式进行了比较。 MVP有很多变体,但它们之间的差异很小。 在这篇文章中,我选择了似乎在当今的应用程序开发中最常用的通用示例。 此变体的特征是: MVP的视图部分同时包含UIViews和UIViewController 该视图将用户交互委托给演示者 演示者包含处理用户交互的逻辑 演示者与模型层进行通信,将数据转换为UI友好格式,并更新视图 演示者不依赖于UIKit 视图是被动的(转储) 以下示例将向您展示如何实际使用MVP。 我们的示例是一个非常简单的应用程序,它显示了一个简单的用户列表。 您可以从此处获取完整的源代码:https://github.com/iyadagha/iOS-mvp-sample。 让我们从一个简单的用户数据模型开始: [js] struct用户{ 让firstName:字符串 让lastName:字符串 让电子邮件:字符串 年龄:整数 } [/ js] 然后,我们实现一个简单的UserService,它异步返回用户列表: [js] 类UserService { //服务延迟交付模拟数据 func getUsers(callBack:([[User])-> Void){ let users = [User(firstName:“ […]