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模式
- 設計模式-C#實現簡單工廠模式設計模式C#
- js 實現簡單釋出訂閱模式JS模式
- mvp模式MVP模式
- RPC模式的介紹以及簡單的實現RPC模式
- Android MVP模式專案實戰AndroidMVP模式
- iOS MVP模式重構實踐iOSMVP模式
- 簡單的單例模式其實也不簡單單例模式
- 簡單工廠模式(simple factory)及程式碼實現模式
- 1、簡單工廠模式實現計算器功能模式
- MVP-------簡單邏輯--------難度1MVP
- 如何實現一個簡單的釋出訂閱模式模式
- Promise 簡單實現Promise
- ReadableStream 簡單實現
- Express 簡單實現Express
- AspectJ簡單實現
- FastClick簡單實現AST
- PHP實現單例模式PHP單例模式
- golang實現單例模式Golang單例模式
- Rust實現單例模式Rust單例模式
- 精簡版 koa 簡單實現
- Kotlin如何實現MVP架構KotlinMVP架構
- 簡單版Promise實現Promise
- 簡單實現vuex原理Vue
- AOP的簡單實現
- 物件池簡單實現物件
- React 簡單實現(一)React
- 簡單的 HashMap 實現HashMap
- 感知機簡單實現
- 瀑布流簡單實現
- 如何簡單實現ELT?
- 實現簡單的BitMap
- ArrayList的簡單實現
- 單例模式實現對比單例模式
- 單例模式c++實現單例模式C++
- Python中實現單例模式Python單例模式
- 【php實現設計模式】之單例模式PHP設計模式單例