在移動開發中,會用到各類架構,好比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人生