iosswift實現簡單MVP模式
在移動開發中,會用到各種架構,比如mvp,mvvm等,其目的就是為了讓專案程式碼的可讀性更好,減輕在view(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裡就不再有那麼多東西了吧。如果喜歡我的文章歡迎關注我哦,有什麼問題可以留言大家一起交流學習!
部落格園: 猿哥愛碼
相關文章
- Android MVP模式--簡單實用示例 BMIAndroidMVP模式
- 一個簡單的MVP模式案例MVP模式
- Android上實現MVP模式的途徑AndroidMVP模式
- 設計模式-C#實現簡單工廠模式設計模式C#
- 【C++】實現一個簡單的單例模式C++單例模式
- MVP+Dagger2設計,MVP架構模式實現新思路 (Demo)MVP架構模式
- js 實現簡單釋出訂閱模式JS模式
- MVP在Android專案中的簡單體現MVPAndroid
- mvp模式MVP模式
- 簡單的單例模式其實也不簡單單例模式
- iOS MVP模式重構實踐iOSMVP模式
- RPC模式的介紹以及簡單的實現RPC模式
- 簡單工廠模式(simple factory)及程式碼實現模式
- 1、簡單工廠模式實現計算器功能模式
- RxJava2 實戰知識梳理(15) 實現一個簡單的 MVP + RxJava + Retrofit 應用RxJavaMVP
- Promise 簡單實現Promise
- FastClick簡單實現AST
- Express 簡單實現Express
- AspectJ簡單實現
- getElementsByClassName簡單實現
- Android MVP模式專案實戰AndroidMVP模式
- 如何實現一個簡單的釋出訂閱模式模式
- java 簡單工廠模式(實現一個計算器)Java模式
- PHP實現單例模式PHP單例模式
- 單例模式的實現單例模式
- golang實現單例模式Golang單例模式
- Javascript實現單例模式JavaScript單例模式
- Rust實現單例模式Rust單例模式
- 用mvp模式實現登入註冊的統一校驗MVP模式
- 設計模式-Java實現單例模式設計模式Java單例
- 精簡版 koa 簡單實現
- 感知機簡單實現
- 簡單版Promise實現Promise
- 實現簡單的BitMap
- ArrayList的簡單實現
- AOP的簡單實現
- 簡單實現vuex原理Vue
- React 簡單實現(一)React