ios swift 实现简单MVP模式
在移动开发中,会用到各种架构,比如mvp,mvvm等,其目的就是为了让项目代码的可读性更好,减轻在android(activity) ios(controller)中的大量代码问题。接下来就开始我们的mvp入门之旅吧。
1.什么是MVP?
MVP是模型(Model)、视图(View)、主持人(Presenter)的缩写,分别代表项目中3个不同的模块。
1.1 模型 (Model):负责处理数据的加载或存储
1.2 视图 (View):负责界面数据的展示与用户交互
1.3 主持人(Presenter):是Model和View之间的桥梁,将两者进行链接。
2.MVP的简单实践:
这里我们用app开发中常用的登录功能为例,用mvp来实现一个登录逻辑(功能)。既然用MVP 那么我们得新建三个类即:LoginModel,LoginPresenter,LoginView,代码如下:
2.1 LoginModel:
// 定义一个协议用于做登录结果的回调
protocol LoginDeletage {
func loginResult(result:String)
}
// 定义一个闭包来实现回调(功能和上面的协议一样,所以可以用协议或闭包来完成回调)
typealias LoginBlock = (_result:String)->Void
class LoginModel:NSObject{
//具体的登录实现逻辑(这里为了方便所以只是模拟了登录过程,实际过程在这里用网络请求完成登录验证即可)
func login(name:String,pwd:String,deletage:LoginDeletage){
if name =="admin"&& pwd =="123"{
deletage.loginResult(result:"登录成功")
}else{
deletage.loginResult(result:"账号或密码错误")
}
}
// 这里用闭包来实现回调其实和上面的功能都一样,只需要选择其中一种即可
func login(name:String,pwd:String,blok:LoginBlock){
if name =="admin"&& pwd =="123"{
blok("登录成功")
}else{
blok("账号或密码错误")
}
}
}
2.2 LoginView:
// 定义一个协议用来实现与界面交互需要的交互方法
protocol LoginView {
// 这里只是使用了一个简单的登录结果显示方法,当然需要其它方法的时候只需要在这里添加相应的方法即可
func loginResult(result:String)
// .......还可以定义更多方法
}
2.3 LoginPresenter:
// 别忘了这里要实现在LoginModel中定义的协议
class LoginPresenter:NSObject,LoginDeletage{
// 持有LoginModel
private var model:LoginModel?
// 持有 LoginView
private var loginView:LoginView?
//在构造方法中传入LoginView
init(loginView:LoginView) {
self.loginView=loginView
self.model = LoginModel()
}
// 定义一个login方法供外部调用
func login(name:String,pwd:String) {
//这里调用通过协议的回调方式调用LoginModel中的login方法
// self.model?.login(name: name, pwd: pwd,deletage: self)
//这里调用通过闭包的回调方式调用LoginModel中的login方法
self.model?.login(name: name, pwd: pwd, blok: {resultin
loginView?.loginResult(result: result)
})
}
// 实现协议里的方法
func loginResult(result:String) {
self.loginView?.loginResult(result: result)
}
}
3.以上三个类定义好了之后接下来开始测试,只需要在我们的viewController中调用即可:
//这里需要实现LoginView的协议
class ViewController:UIViewController,LoginView{
private var p:LoginPresenter?
overridefuncviewDidLoad() {
super.viewDidLoad()
self.p=LoginPresenter(loginView:self)
self.p?.login(name:"admin", pwd:"1234")
}
func loginResult(result:String) {
print("登录结果:",result)
}
}
4.总结:
至此,一个简单的MVP登录实现就出来了,是不是发现viewController中的代码很简洁明了。MVP 的好处是不是就体现出来了,比以往的传统模式来说viewController里就不再有那么多东西了吧。如果喜欢我的文章欢迎关注我哦,有什么问题可以留言大家一起交流学习!
简书: Code人生
ios swift 实现简单MVP模式的更多相关文章
- iOS设计模式 - (3)简单工厂模式
iOS设计模式 - (3)简单工厂模式 by Colin丶 转载请注明出处: http://blog.csdn.net/hitwhylz/article/ ...
- iOS设计模式之简单工厂模式
简单工厂模式 基本理解 到底要实例化谁,将来会不会增加实例化的对象,比如计算器增加开根运算,这是很容易变化的地方,应该考虑用一个单独的类来做这个创造实例的过程,这就是工厂. 通过使用工厂模式,我们可以 ...
- iOS设计模式:简单工厂模式
1.简述 首先需要说明一下,简单工厂模式不属于23种GOF设计模式之一.它也称作静态工作方法模式,是工厂方法模式的特殊实现(也就是说工厂模式包含简单工厂模式).这里对简单工厂模式进行介绍,是为后面的工 ...
- iOS Swift最简单的Animation
最近发现Animation是一个iOS开发中非常好玩的元素,能给应用的交互性增色不少.比如很多音乐应用的菜单从底部弹出和隐藏的效果. Animation最核心的当然就是UIView的animateWi ...
- iOS学习之MVC,MVVM,MVP模式优缺点
为什么要关注架构设计? 因为假如你不关心架构,那么总有一天,需要在同一个庞大的类中调试若干复杂的事情,你会发现在这样的条件下,根本不可能在这个类中快速的找到以及有效的修改任何bug.当然,把这样的一个 ...
- iOS 简单工厂模式
iOS 简单工厂模式 什么是简单工厂模式? 简单工厂模式中定义一个抽象类,抽象类中声明公共的特征及属性,抽象子类继承自抽象类,去实现具体的操作.工厂类根据外界需求,在工厂类中创建对应的抽象子类实例并传 ...
- iOS开发Swift篇—简单介绍
iOS开发Swift篇—简单介绍 一.简介 Swift是苹果于2014年WWDC(苹果开发者大会)发布的全新编程语言 Swift在天朝译为“雨燕”,是它的LOGO 是一只燕子,跟Objective-C ...
- 从最简单的HelloWorld理解MVP模式
版权声明:本文为博主原创文章,转载请注明出处:http://www.cnblogs.com/joy99/p/6116855.html 大多数编程语言相关的学习书籍,都会以hello,world这个典型 ...
- iOS开发-简单工厂模式
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性.概念很长,iOS开发中最常 ...
随机推荐
- js页面埋点
页面埋点的作用,其实就是用于流量分析.而流量的意思,包含了很多:页面浏览数(PV).独立访问者数量(UV).IP.页面停留时间.页面操作时间.页面访问次数.按钮点击次数.文件下载次数等.而流量分析又有 ...
- HTTP-Runoob:HTPP Content-Type
ylbtech-HTTP-Runoob:HTPP Content-Type 1.返回顶部 1. HTTP content-type Content-Type,内容类型,一般是指网页中存在的Conten ...
- tomcat正常启动但是访问 404
最近遇到了一些奇葩的的问题,搞了好半天才处理掉.今天就简单记录一下吧,以备不时之需. 问题描述: 在整合spring mvc项目的完成后,正常启动tomcat,发现tomcat启动成功了,但是访问本 ...
- 数据库:sql 多表联合更新【转】
SQL Update多表联合更新的方法 (1) sqlite 多表更新方法 update t1 set col1=t2.col1 from table1 t1 inner join table2 t2 ...
- 利用DNS进行传输数据
曾经有这样一道题目,困了我数个小时,最后我尝试利用此方法时我知道真相的时候,眼泪已掉下来. 遇到的是一个流量分析题,分析DNS数据,拿到flag 流量如图所示: 进入linux,提取: [root@s ...
- 查看hdfs各目录分别占用多少空间
之前在网上搜索到的全部单位好像都是byte的,看起来很麻烦,然后自己看了下 hadoop fs -help [hadoop@slave3 java]$ hadoop fs -help Usage: h ...
- 【260】centos设置root密码
怎么进Linux单用户模式 http://tieba.baidu.com/p/2216642385 http://jingyan.baidu.com/article/c1a3101ea68dafde6 ...
- oracle DDL(create、alter、drop)
一.创建表1.创建表CREATE TABLE <table_name>( column1 DATATYPE [NOT NULL] [PRIMARY KEY], column2 DATATY ...
- Excel VBA 若要在64位系统上使用,则必须更新此项目中的代码,请检查并更新Declare语句,然后用PtrSafe属性标记它们
在Office 2010 32位上开发的Excel VBA系统,迁移到Office 2010 64位下面,打开后使用,报下面错误: 解决办法: 在Declare 后面加PtrSafe 进行标记
- Java Annotation详解
元数据的作用 如果要对于元数据的作用进行分类,目前还没有明确的定义,不过我们可以根据它所起的作用,大致可分为三类: l 编写文档:通过代码里标识的元数据生成文档. l ...