[ SWIFT ] - 史丹福 StandFord-CS193P-課程2-心得分享-20150721

史丹福 StandFord 課程2-心得分享-20150721
第2堂課將延續之前的計算機部分,為計算機新增加減乘除功能,其中有關程式碼精簡部分,真的非常精采!推薦您上網看完整個片段

(1)程式碼精簡
說明:
在程式中透過operandStack儲存使用者在計算機中輸入的數字或運算符號,利用removeLast取出要運算的內容!

由於加減乘除中都是重複的內容,因此新增func performOperation來完成 operandStack.removeLast的取值動作!
新增func multiply來依運算符號進行運算動作
func performOperation與func multiply完成結果

精簡過程:
(1)由於swift可透過func performOperation 知道傳入參數與回傳值 的資料型態,因此可將資料型態部分省略!
 (2)省略return
(3)swift接受不為參數命名( 因此(op1,op2) in 部分可以刪除 ),當參數沒有命名時,會自動依$0、$1....為參數命名!
將(op1,op2) in op1 * op2 改成 (op1,op2)in $0 * $1,刪除參數後剩下 $0 *$1

將performOperation({$0 * $1}) 改成 performOperation(){$0 * $1},再將()刪除,剩下{$0 * $1}





(2)MVC 介紹

MVC的組成與關係:
MVC由 Model、View、Controller組成,圖中以交通線來比喻彼此之間的關係:
(1)Controller與View:虛實線,表示Controller可與Model和View進行溝通,而溝通的方式說明如下:

a.由Controller傳遞資訊給Model 或 View:使用Outlet,例如在開發過程中我們會從MainStoryBoard拖曳物件到ViewController,產生@IBOutlet

b.View和Controller得溝通方式有三種:

(b.1)設置View對應的Action Target當Controller需要View提供資訊時:Controller會透過target方式,在View上產生一個action View在UI改變時,就會主動action回傳資訊給Controller,例如設置UIButtonTouch up insideAction Target

(b.2)設置Viewdelegate:有時候View會需要和Controller進行同步,對View而言,處理的事件主要可分為三種狀態:Should、DId與Will,但View不知道目前需要的是哪一種狀態,因此View將狀態的判別,委託delegate給Controller,由Controller來告訴View要執行的狀態!
如:UIAlertViewDelegate, UIActionSheetDelegate等。


(b.3)設置Viewdata source:對View而言不需要做資料保存(那是model的工作),而是在需要的時候由Controller向Model取出資料後,在提供給View做呈現,如:有一百首歌曲在手機中,但播放清單只能呈現10筆,因此Controller會依操作向Model存取資料,例如:提供第11~21筆的歌曲名稱,在傳送給View做呈現!常見的DataSource:UITableViewDataSource 

通過這3種模式,View達到了既能向Controller通訊,又不需要知道具體的Controller是誰的目的

c.Model與Controller:
當Model的內容改變時,是透過類似電台廣播(Notification & KVO)的方式通知所有人, 但View不可以取得廣播得內容。

補充說明:

Delegation是一種「兩個不同物件的互動行為」的設計模式,為什麼需要它?原因很簡單,我們不可能用繼承(inherit)物件的方式,達成我們想要作的事,尤其是在兩種不同任務的物件類型,為了要分離清楚彼此的任務與工作,我們需要用不同的方式來達成。

觀察者(Observers)
在程式中並不是所有的事情都是交給你處理,也不可能是這樣。在Cocoa的架構下,我們要處理只有我們想要的或需要的,也不是所有事件處理都是用delegation。最常使用的地方,就是當發生事件時,發出警告通知已經寫好的對應處理程式碼,這會有三種情況:

Should :事件(或動作)"應該"要作嗎?
Did :在事件(或動作)"已經"完成時
Will :在事件(或動作)"將要"動作時。(準備要作)

圖:MVC


留言

熱門文章