ios MVVM實踐 刷新網路請求+tableView展示數據

来源:http://www.cnblogs.com/buerjj/archive/2017/10/13/7661693.html
-Advertisement-
Play Games

先展示實現的效果圖如下: 此示例展示用的是MVVM結構形式,表述如下 M:數據Model的存儲,可以用來對屬性進行處理。(即胖model概念,上圖中xx萬人訂閱這個處理方法寫在Model內) V: View。用來統一管理控制項初始化與佈局。 VM:viewModel。負責網路請求及其他計算或事件處理 ...


先展示實現的效果圖如下:

 

此示例展示用的是MVVM結構形式,表述如下 

M:數據Model的存儲,可以用來對屬性進行處理。(即胖model概念,上圖中xx萬人訂閱這個處理方法寫在Model內)

V: View。用來統一管理控制項初始化與佈局。

VM:viewModel。負責網路請求及其他計算或事件處理

 

目錄結構如下:

viewController文件夾下有一個控制器和一個MLDataView,這個view添加在控制器self.view上,然後這個控制器中其他view的初始化,添加和佈局都在這個MLDataView里進行,這樣把View分離整合到了一起。

MLDataViewModel里負責了網路請求,tableView代理和數據源方法的實現,及其他一些事件邏輯的封裝。傳統MVC一般這些代碼都是放在控制器內,現在這樣大量減少了控制器的代碼。

MLDataModel里存儲傳輸的數據,它也可以用來處理一些格式化的數據。如下圖

這樣model也可以分擔一些屬性的格式化處理。

 

整體架構上的一些其他封裝:

1.自定義MLHTTPSessionManager繼承自AFHTTPSessionManager,可以在自定義的類里優雅地處理請求頭,響應頭或https設置相關的一些信息

2.網路請求擴展性強:自己公司的網路請求實現文件里邏輯要多得多,包括Token失效,刷新RefreshToken,網路請求錯誤碼的攔截等。這些業務都可以根據自己的需要加入。

3.MLCustomHud彈出toast提示。實用性非常強。

4.Base文件夾下有兩個類,其實企業及項目基本都會建立基類,也就是所以view都可以有一個基類,如tableView,UIlabel,UIButton,WKWebView,UITableViewCell等等,然後可以在基類中建立一些快捷方法設置屬性等。

5.Category文件夾下Unicode里的代碼為了實現nslog無法輸出中文的問題。

6.Category下UIView+HudCount分類,用runTime對view進行引用計數。它的獨有優勢在於防止多個網路請求同時發生時對Loading框產生干擾,即可防止loading框重疊或提前消失。

 

PS:真正的mvvm應該是viewModel與View上的數據是雙向綁定的,這裡只是簡單實現結構的分層,並沒有實現雙向綁定,雙向綁定內容後期加上會再分享出來。 

 

最後附上demo地址:

碼雲:https://gitee.com/LiJinShi/MVVM_Demo

gitHub:https://github.com/LiJinShi/MVVM_Demo

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • JS中常用的內置函數如下: 1、eval(str):計算表達式的結果。 2、parseInt(str,n):將符串轉換成整數數字形式(可指定幾進位)。 3、parseFloat(str):將字元串轉換成符點數字形式。 4、isNaN(): 測試是(true)否(false)不是一個數字。 5、isF ...
  • 隔行變色功能,不用js,直接用css偽類就可以做,這個實例可以作為js插件開發很好的入門級實例。本文實現的隔行變色包括以下功能: 1,支持2種常用結構共存( div元素 和 表格類型 ) 2,一個頁面內支持不同模塊隔行變色,分別管理 3,可以定製的配置有: 奇/偶數行的背景顏色 特定的模塊加上隔行變 ...
  • template.js插件在表格渲染方面還是極其出色的,當數據在非同步載入後不用使用傳統的方式,在ajax裡面拼接html語句載入表格,直接用這個插件將ajax傳回來的json數組直接渲染在前端中,省下了不少時間。 我使用template.js主要是滿足項目實現為目的,不是深入探究,總結一下我在項目里 ...
  • ``` <!doctype html vue route demo Hello App! <! 使用 router link 組件來導航. <! 通過傳入 屬性指定鏈接. <! <router link 預設會被渲染成一個 標簽 Go to Foo Go to Bar <! 路由出口 <! 路由匹配 ...
  • //除法函數,用來得到精確的除法結果//說明:javascript的除法結果會有誤差,在兩個浮點數相除的時候會比較明顯。這個函數返回較為精確的除法結果。//調用:accDiv(arg1,arg2)//返回值:arg1除以arg2的精確結果function accDiv(arg1,arg2){ var ...
  • 這是我學習nodejs以來做的第一個小例子,很簡單,就是在第一個頁面里輸入自己的名字,在第二個頁面(有圖片)中顯示。思路和很多地方都參考了http://www.cnblogs.com/giggle/p/6287931.html 這篇文章,感謝作者。 這篇文章中說得不對的地方希望大家指正。 ...
  • 一:文件傳輸 在android開發中,有時候需要將文件從pc端傳遞至android,或者將軟體運行的日誌,從android設備傳遞到pc進行分析,我們可以使用windows的cmd視窗,或者android studio的terminal視窗來傳遞文件。 1:連接android設備 此處預設是andr ...
  • Activity的生命周期 1.正常情況下的生命周期 Activity的生命周期切換過程 關於onStart和onResume、onPause和onStop的不同,onStart和onStop是從Activity是否可見這個角度來回調,onResume和onPause是從Activity是否位於前臺 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...