雖然只是課程的第二講,但其中的干貨還是很多的骂远。強(qiáng)烈建議跟著視頻一起動(dòng)手實(shí)現(xiàn)囚霸。
本講簡(jiǎn)介:本講主要涉及三方面的內(nèi)容。一激才,MVC拓型。二,計(jì)算器的實(shí)現(xiàn)(枚舉, 閉包)三瘸恼,自動(dòng)布局劣挫。
一,MVC东帅。這應(yīng)該是最著名的設(shè)計(jì)架構(gòu)了压固。學(xué)習(xí)MVC 要注意掌握以下要點(diǎn)
Model : 模型是應(yīng)用的核心,代表了應(yīng)用所包含的數(shù)據(jù)靠闭,以及對(duì)數(shù)據(jù)的操作帐我。
Controller: 控制器決定了模型是如何被展示的
View: 視圖是控制器的附屬,被控制器用來(lái)展示數(shù)據(jù)
關(guān)鍵點(diǎn): 視圖和模型相互之間不應(yīng)該有任何直接的交流愧膀。
另外要注意的是拦键,并不是所有顯示出來(lái)的內(nèi)容都屬于View,比如計(jì)算器應(yīng)用中的那些按鈕檩淋。應(yīng)用中往往還包含許多屬于MVC以外的東西芬为。MVC只是人們用來(lái)刻畫(huà)應(yīng)用中一種常見(jiàn)的核心的架構(gòu)。實(shí)際應(yīng)用中常常要包含多個(gè)MVC架構(gòu)一起工作蟀悦。一個(gè)MVC可以做為一個(gè)整體成為另一個(gè)MVC中的View媚朦。
深刻理解和掌握MVC架構(gòu)有助于我們做出簡(jiǎn)潔、高效的設(shè)計(jì)日戈。從MVC中還衍生出一些其它的所謂新的架構(gòu)莲镣,如MVVM,MVP涎拉。不建議新手去過(guò)多涉及,容易糊涂的圆。等自己有過(guò)一些實(shí)踐之后鼓拧,再去看更容易理解或者發(fā)現(xiàn)自己已經(jīng)應(yīng)用過(guò)這些架構(gòu)了。重點(diǎn)是掌握設(shè)計(jì)背后所遵循的原則越妈。
計(jì)算器:
計(jì)算器的實(shí)現(xiàn)通常是使用堆棧季俩。比如在iOS 8 版的cs193p中的演示就是基于堆棧實(shí)現(xiàn)的。這個(gè)版本和上一版使用了一個(gè)臨時(shí)的結(jié)構(gòu)PendingBinaryOperation來(lái)存貯前一個(gè)操作數(shù)和操作符梅掠。這樣帶來(lái)的一個(gè)問(wèn)題是如果連續(xù)操作的話只會(huì)保留最后一次的結(jié)果酌住。例如店归,連續(xù)按 1+2+3+4+5= 結(jié)果會(huì)是9 而不是15。這樣的實(shí)現(xiàn)很大程度是因?yàn)橐榻B枚舉的關(guān)聯(lián)值特性酪我。
枚舉成員可以指定任意類(lèi)型的關(guān)聯(lián)值存儲(chǔ)到枚舉成員中消痛。
這個(gè)枚舉類(lèi)型包含4個(gè)成員。其中3個(gè)含有關(guān)聯(lián)值都哭。function 也可以作為關(guān)聯(lián)值秩伞。使用這樣的枚舉成員時(shí)需要同時(shí)標(biāo)明相應(yīng)的關(guān)聯(lián)值。關(guān)聯(lián)值可以給有不止一個(gè)欺矫。關(guān)聯(lián)值的提取可以用let纱新,也可以用 var。詳細(xì)可以參考官方的Swift手冊(cè)穆趴。
閉包可以看作是一個(gè)未命名函數(shù)脸爱,或者一堆語(yǔ)句操作的集合。
Autolayout:
蘋(píng)果提倡在story board中直接利用autolayout進(jìn)行布局未妹。雖然使用story board在協(xié)同開(kāi)發(fā)的時(shí)候可能會(huì)引起混亂簿废。但這不影響Autolayout 成為iOS開(kāi)發(fā)必須要掌握的內(nèi)容之一。關(guān)于autolayout的介紹在后面的課程里還會(huì)涉及教寂。在本講中捏鱼,主要是利用stack view 來(lái)組織和排列計(jì)算器的按鈕和結(jié)果顯示,比較易懂酪耕。感興趣的同學(xué)還可以試驗(yàn)一下去掉一個(gè)按鈕导梆,比如cos,然后讓等號(hào)變?yōu)閮杀秾捲撊绾尾季帧?/p>
另外在Xcode 中可以非常方便地觀察當(dāng)前的布局在不同設(shè)備上的表現(xiàn)迂烁。所以基本不需要使用preview了看尼。
其它:
本講提到了類(lèi),結(jié)構(gòu)以及枚舉類(lèi)型的一些異同盟步。下一講還有介紹藏斩。
結(jié)構(gòu)會(huì)自動(dòng)獲得一個(gè)構(gòu)造函數(shù)( initializer),大家可以根據(jù)下圖想象一下它的樣子
因?yàn)榻Y(jié)構(gòu)在傳遞時(shí)使用的是值拷貝却盘,所以如果一個(gè)結(jié)構(gòu)的成員函數(shù)會(huì)修改自身狰域,函數(shù)須要用mutating標(biāo)明。
constant 和 unaryOperation 在swift中都不是保留字
函數(shù)如同class黄橘, struct兆览,double一樣也是一種類(lèi)型
使用Playground 可以方便的驗(yàn)證代碼的效果。這在學(xué)習(xí)新語(yǔ)言的時(shí)候很有用塞关。
影響應(yīng)用性能的三種操作抬探,由大到小排列是:網(wǎng)絡(luò)下載 > 屏幕繪圖/顯示 > 從數(shù)據(jù)庫(kù)中取數(shù)據(jù)
本講用到的快捷鍵:
?+?+Space ? ? ? ?// 顯示符號(hào)輸入對(duì)話框 ? ??