讓不懂編程的人愛上iPhone開發系列2 iOS12+Swift4.2版-Checklists-10

說明

本系列教程改編自raywenderlich.com中的iOS Apprentice系列,有需要的童鞋請移步到這裡購買英文版原教程:store.raywenderlich.com

歡迎繼續我們的學習。

在之前的內容中,我們已經為這款事務管理軟體創建了一個表視圖,還顯示出了幾行內容,然後增加了勾選和取消勾選的功能。

不過到目前為止,這個表視圖裡面的數據都是硬塞進去的「偽」數據。對於真正的事務管理應用來說,這樣的做法顯然是不科學的~畢竟,或許大家根本就不喜歡看賀歲片電影,而是想做點別的什麼事情。

為了更好的保存、管理和顯示待辦信息,我們需要創建一個數據模型,來更好的存取相關信息。

從這一課開始,我們會帶領大家來學習如何實現數據模型了。

而為了完成這個偉大光榮的任務,我們需要學習三方面的知識:

1.MVC(Model-View-Controller)

這是iOS開發中必須掌握的核心理念~

2.數據模型

我們要學習如何創建一個真正意義上的數據模型

3.優化代碼

秉承蘋果一貫的風格,從內到外都要美。當完成了功能之後,我們需要簡化現有的代碼,方便以後(或者後續接盤的人)閱讀、理解和維護。

而首先我們要學習的就是Model-View-Controller。

Model-View-Controller(模型-視圖-控制器)

傳說中NB?比的MVC再次出現了。任何?個iOS開發教程都不能略過對Model-View-Controller,也 就是MVC的解釋說明。在iOS開發中,MVC是三大基礎模式之?。實際上我們已經領教過另外兩種模式的厲害了,

它們分別是:delegation(代理/委託),也就是讓某個對象代表另一個對象做一些 事情。

然後是target-action,通過這種?方式可以讓交互事件(?如觸碰)和特定的動作?法關聯在

?起。

而通過MVC模式,可以將應?中的所有對象分成三大類:

1.Model 對象,也就是數據模型。

model對象中包含了應用中的數據以及對數據的任何處理。假如我們要開發一款菜譜應用,那麼model對象顯然就包含了所有的菜譜。

在遊戲中,model對象可能是不同關卡的設計,玩家的得分和怪物所在的位置。對數據模型對象的操作有時候被萬惡的術語黨 稱為」業務規則「或者」領域邏輯「,」業務邏輯「神馬的。

不要被這些名詞嚇倒,Don』t panic不管這些 名詞怎麼叫,你只需要知道它們的本質是關於如何處理數據就好了。 在我們這個事務管理軟體應?中,事務清單和代辦事務構成了數據模型。

2. View對象,也就是視圖對象。

視圖對象其實就是我們應?中的所有可視元素,?如圖片,按鈕, 標籤,?本框等等。在遊戲中視圖對象就是遊戲世界的視覺呈現,?如怪物攻擊的動畫,?條法條等等。一個視圖對象可以繪製?身,同時對?戶輸?做出響應,但它通常不會直接處理應?中的邏輯。很多視圖對象(?如UITableView)可以在不同類型的應?中重用,就是因為它們沒有和某種特定的數據模型綁定在?起。

3.Controller對象。在iOS開發中將其稱為視圖控制器,它的作?是負責將數據模型對象和視圖對象關聯在?起。視圖控制器會監聽用戶對視圖的觸碰事件,然後讓數據模型對象做出相應的處理,並根據所處理的結果來更新視圖的顯示。

在iOS中,我們把這種controller對象稱為」視圖控制器「,視圖控制器是MVC模式中的主宰?量。

下?的這個圖顯示了MVC中的不同類型對象是如何相同作?的。

在iOS開發中,?個視圖控制器會有?個自?的主視圖,可以通過view屬性來訪問。主視圖中包 含了?系列的?視圖。我們經常會看到?個界面中有多個?視圖存在。處於視圖層級頂端的視圖通常會覆蓋整個屏幕界面。?我們通常在storyboard(或xib?件)中來設計視圖控制器所管理的界面的視覺元素布局。

在我們當前的這款應?中,主視圖就是UITableView,?它的?視圖則是table view cell。每個cell也都 有各?的?視圖,?如?本標籤,附屬(如勾選標誌)等等。

?個視圖控制器只負責管理應?中的?個界面。如果應?中有多個界面,那麼每個界面都有自?的視圖,同時每個界面?被各?的視圖控制器所管理。在界面跳轉的時候,掌控權就會從?個視圖控制器轉交到下?個視圖控制器。

在iOS開發的過程中,我們經常會需要創建屬於自?的視圖控制器。不過iOS中提供了?些?便易? 的視圖控制器,?如?於撰寫郵件的mail compose 視圖控制器,?於從照?片庫中選擇照?片的image picker 視圖控制器,?於顯示列表信息的表視圖,等等。

繼續腦補。

關於視圖和視圖控制器的區別

相信在看了對MVC的解釋後,?家對視圖和視圖控制器的區別應該略有所悟。不過這?還是要再次強調下,以便加深印象。在iOS的程序世界中,視圖和視圖控制器是兩個完全不同的?物。

視圖對象?於在屏幕界?上繪製?些東?,?比如按鈕或標籤。

所以視圖就是你可以看到的東?,?視圖控制器則是垂簾聽政的幕後操控者。 很多初學者將視圖控制器對象命名為類似FirstView或者MainView。千萬別這麼做,這樣會把你?己搞糊塗的。

如果?個對象屬於視圖控制器,應該將其命名為」ViewController』,?不是」View」。

有時候我在想,蘋果乾?要在view Controller的前?加個view,直接叫controller不是更省事嗎。因為視圖控制器不僅會控制視圖,還會控制你的數據模型,它是?者之間的橋樑。

不過想歸想,既然蘋果這麼命名了,我們就得跟著做,除?你有偉大的夢想,有一天把??買下來。

關於MVC的更多知識,可以看看維基和百度百科:

en.wikipedia.org/wiki/M

baike.baidu.com/view/54

好了,關於MVC的介紹就先到這裡了。

感興趣的童鞋還可以看看iTunes-U上面的斯坦福教程,裡面對MVC的解釋更加深入。

這一課就先到這裡了,我們下一課再見~

聯繫方式:

個人微信: iseedo

QQ討論群:375143733

微信公眾號: icodefun

答疑說明:

有相關的問題請到課程答疑專區提問icode.fun/ask/forum.php

福利時間


推薦閱讀:

TAG:iOS | 蘋果公司(AppleInc.) | iPhone |