ios swift 實現簡單MVP模式

        在移動開發中,會用到各類架構,好比mvp,mvvm等,其目的就是爲了讓項目代碼的可讀性更好,減輕在android(activity) ios(controller)中的大量代碼問題。接下來就開始咱們的mvp入門之旅吧。android

 

1.什麼是MVP?ios

    MVP是模型(Model)、視圖(View)、主持人(Presenter)的縮寫,分別表明項目中3個不一樣的模塊。 網絡

1.1 模型 (Model):負責處理數據的加載或存儲閉包

1.2 視圖 (View):負責界面數據的展現與用戶交互架構

1.3 主持人(Presenter):是Model和View之間的橋樑,將二者進行連接。 app

 

2.MVP的簡單實踐:mvvm

       這裏咱們用app開發中經常使用的登陸功能爲例,用mvp來實現一個登陸邏輯(功能)。既然用MVP 那麼咱們得新建三個類即:LoginModel,LoginPresenter,LoginView,代碼以下:ide

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人生

相關文章
相關標籤/搜索