zoukankan      html  css  js  c++  java
  • 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人生

  • 相关阅读:
    jQuery入门和DOM对象
    jQuery事件
    基础,层次,选择器
    MarkDown快速入门(typora)
    source是读入环境配置文件的命令,不能读入vimrc
    vi中将tab键转化为空格
    django-rest-framework学习之Quickstart和Serializer--2017年4月10日至12日
    Flask-RESTful插件介绍--2017年4月7日
    python restful api 编程--2017年4月6日
    一个验证登录的程序:python编写flask架构restful风格--2017年4月6日
  • 原文地址:https://www.cnblogs.com/zzjbk/p/8658964.html
Copyright © 2011-2022 走看看