[APP開發-使用Swift] 觀念介紹: Delegation

Chiwen Lai
3 min readSep 26, 2017

--

Delegation — 中文翻譯為『代表、委託』,也就是把自己不想做的事,交給別人去做(咦?!)。

Delegation (cartoonstock.com)

在Storyboard中點選Table View按右鍵,即可看到其實Table View已經自動連結了2個delegation,一個是dataSource,另一個是delegate。

dataSource及delegate其實兩者都是一樣的機制,只是前者定義資料,後者定義介面。先參考Apple 文件:

A data source is like a delegate except that, instead of being delegated control of the user interface, it is delegated control of data. ~Apple Developer

  • UITableViewDataSource:告訴UITableView要顯示什麼資料,例如總共幾筆資料、每一列的內容等等。
  • UITableViewDelegate:處理UITableView的外觀以及點選表格的事件處理,例如表格每一列的高度、點選某一列後要做什麼等。

Delegation 其實是軟體設計模式中的一項基本技巧,並不是Swift獨有。Delegation最大的好處就是幫助實現MVC架構。可以先參考「觀念介紹:MVC」了解何謂MVC架構。

在Storyboard中的UITableView本身就是介面設計高手,它知道如何呈現表頭及表格列,也知道如何運用表格中的Cell讓性能最佳化。但是它並不知道表格裡要呈現的內容,裡面要呈現的是資料總共幾筆?第N列要顯示什麼?點選了某一列之後要做什麼動作?這就需要Controller告訴它。UITableViewDataSource、UITableViewDelegate這2個delegation專家就負責UITableView本身不需要處理的邏輯事務,各司其職,執掌清楚。

另一方面,Delegation也很適合用來objects間傳遞資料用,這部分我們留待下次說明。

--

--