SwiftUI學習-1 MVVM的理解

MVVM

原本一直在用Objective-C開發(fā)爹土,應用本身是基于MVC來構建代碼結構的,最近了解到SwiftUI必須遵守MVVM才能工作焦人,所以開始深入了解這個概念竖独。主要是通過斯坦福大學這個公開課學習,總結一下重要的知識點砂客。鏈接:

https://www.bilibili.com/video/BV14z4y1d7b4?spm_id_from=333.999.0.0

MVC


MVC是Model-View-Controller結構泥张,在傳統(tǒng)UIKit框架中使用。并不是說UIKit一定要用MVC鞠值,而是和MVC的匹配度較高媚创。

  • MVC的Model一般相對簡單,只是創(chuàng)建一個數(shù)據(jù)對象格式彤恶。而數(shù)據(jù)的封裝钞钙、操作和管理,一般都是放在Controller中執(zhí)行声离。
  • MVC的View進行視圖的構建芒炼、渲染和事件響應處理,以及提供一些刷新方法供Controller使用术徊。
  • Controller則承擔數(shù)據(jù)本刽、邏輯和視圖更新操作,與View和Model的關系是單向通信的赠涮,而Controller向View進行命令式(imperative)的指令操作子寓。

舉例:
帝國中的皇帝發(fā)出各種命令指揮別人做事情,一個國家就是這么運轉起來的笋除。但是缺點很明顯别瞭,由于命令是一個個下發(fā)的,這其中非常不利的一個原因就是時間株憾。
在UI開發(fā)中蝙寨,這種命令式執(zhí)行晒衩,函數(shù)隨著時間推移進行調用:這個Button放這里,那個Label放那里墙歪,過一會做這個听系,再一會執(zhí)行那個,又可能其他人隨時可以調用函數(shù)來更改UI虹菲,就要時刻保持警惕靠胜。
這時,我們就需要一個時間線去理解調用函數(shù)的順序毕源,并且我們無法證明界面在任意順序調用任意函數(shù)情況下浪漠,界面能夠真實有效的工作。因為在命令式操作下霎褐,無法同時執(zhí)行所有指令址愿。

MVVM


MVVM是Model-View-ViewModel結構,在SwiftUI框架中使用冻璃。SwiftUI是響應式編程(reactive programming)响谓。

  • MVVM的Model與UI完全獨立,處理數(shù)據(jù)和邏輯的操作省艳。數(shù)據(jù)流(data flows)在映射到視圖的過程中是只讀的娘纷。
  • MVVM的View是聲明式(declarative)視圖,我們?yōu)閁I聲明的方法跋炕,在任何時候做它們應做的事情赖晶。不需要關心任何狀態(tài)變化(state changes),狀態(tài)在Model中記錄辐烂,View僅僅是映射Model中的數(shù)據(jù)遏插,Model變化帶來View變化,所見即所得棉圈。

Stuct結構體中的代碼,實際上是只讀的眷蜓,調用時不可能有其他人改變函數(shù)中的代碼分瘾,看到的就是聲明的。

  • ViewModel執(zhí)行解釋(interpreter)工作吁系,將View綁定到Model上德召。ViewModel關注Model中的變化(notices changes),然后發(fā)布這些變化(publishes changed)汽纤,訂閱(subscribes)了某個發(fā)布(publication)的View會進行改變上岗。

重要的一點是理解ViewModel沒有直接指向View的指針,不直接與View對話蕴坪。如果View訂閱了某個發(fā)布肴掷,就會詢問ViewModel怎么適應現(xiàn)在的變化敬锐,這個過程不會回到Model,因為ViewModel作用就是解釋Model的變化呆瞻。

MVVM的Processes Intent

MVVM有一個對應的關聯(lián)架構台夺,是Model-View-Intent。如果用戶意圖(intent)做一些操作痴脾,那么這些Intent就要進行View到Model這個反向傳遞過程颤介。而swiftUI還沒有進行這個設計,所以我們用下面一系列操作來處理Intent:

  • View Calls Intent function 視圖調用方法
  • ViewModel modifies the Model 視圖模型修改模型
  • Model changes 模型改動變化
  • ViewModel notices changes and publishes 模型關注到變化并發(fā)布
  • View whitch subscribes Reflect the Model 訂閱變化的視圖進行模型映射

對比MVVM的映射過程赞赖,多了ViewModel處理View操作滚朵,并且修改Model這兩個操作。

總結


OC作為使用數(shù)十年的iOS第一開發(fā)語言前域,確實在現(xiàn)今各種新興前端語言中辕近,顯得繁冗不堪。Swift在數(shù)年的時間內逐漸迭代话侄,替代OC已經(jīng)是不可阻擋的歷史浪潮亏推。
哪怕OC這么強大的語言,不進步也很快就要被淘汰了年堆,何況我們只是時代的搬磚人呢吞杭,不斷學習新內容是我們必須做的事情。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末变丧,一起剝皮案震驚了整個濱河市芽狗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌痒蓬,老刑警劉巖童擎,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異攻晒,居然都是意外死亡顾复,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門鲁捏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芯砸,“玉大人,你說我怎么就攤上這事给梅〖偕ィ” “怎么了?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵动羽,是天一觀的道長包帚。 經(jīng)常有香客問我,道長运吓,這世上最難降的妖魔是什么渴邦? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任疯趟,我火速辦了婚禮,結果婚禮上几莽,老公的妹妹穿的比我還像新娘迅办。我一直安慰自己,他們只是感情好章蚣,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布站欺。 她就那樣靜靜地躺著,像睡著了一般纤垂。 火紅的嫁衣襯著肌膚如雪矾策。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天峭沦,我揣著相機與錄音贾虽,去河邊找鬼。 笑死吼鱼,一個胖子當著我的面吹牛蓬豁,可吹牛的內容都是我干的。 我是一名探鬼主播菇肃,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼地粪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了琐谤?” 一聲冷哼從身側響起蟆技,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎斗忌,沒想到半個月后质礼,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡织阳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年眶蕉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唧躲。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡造挽,死狀恐怖,靈堂內的尸體忽然破棺而出惊窖,到底是詐尸還是另有隱情刽宪,我是刑警寧澤厘贼,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布界酒,位于F島的核電站,受9級特大地震影響嘴秸,放射性物質發(fā)生泄漏毁欣。R本人自食惡果不足惜庇谆,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望凭疮。 院中可真熱鬧饭耳,春花似錦、人聲如沸执解。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽衰腌。三九已至新蟆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間右蕊,已是汗流浹背琼稻。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留饶囚,地道東北人帕翻。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像萝风,于是被迫代替她去往敵國和親嘀掸。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內容