Delegation - eddychang.me

Delegation實際範例


實際使用時的語法結構

白鬍子教授在Developing iOS 8 Apps with Swift (Stanford)的第6課Delegation & Gestures中,示範了delegation(他用的是data source,與delagate意思相同但主要用於資料部份)的用法與使用時機,這是真正用Delegation的語法結構:

Delegation說三道四


為什麼需要Delegation?

Delegation是一種「兩個不同物件的互動行為」的設計模式,為什麼需要它?原因很簡單,我們不可能用繼承(inherit)物件的方式,達成我們想要作的事,尤其是在兩種不同任務的物件類型,為了要分離清楚彼此的任務與工作,我們需要用不同的方式來達成。本文以最簡單的生活實例來理解delegation,或許可以很容易的理解它在作什麼的,與用在什麼情況的。這篇只是個起頭,或許之後還有更多針對這個議題的討論或心得文章。

對於delegation或delegate的本文中保留原字詞,就是「委託」或「代表」的意思。

TableView中的Delegation


TableView簡說

TableView在iOS中是十分重要而且常見的一種View。如果ViewController是繼承自TableViewController,那麼就不需要遵守(conform) UITableViewDelegateUITableViewDataSource兩個protocol。這篇文章並不是在解說TableView是怎麼作的,是想了解一下TableView中的Delegation是怎麼達成(掛勾)的。

UITableViewCell的重覆使用機制


TableView中的Cell

UITableView僅只是個外框架,實際上我們會花更多的時間專注在TableView裡的Cell,也就是每列所呈現的樣子,當然所有的資料呈現也是在這個裡面。UITableViewCell並不是UITableView的子類,它是繼承自UIView的子類(註:UITableView→UIScrollerView→UIView)

重覆使用的機制

UITableViewDataSource中有一個要求實作的方法tableView: cellForRowAtIndexPath:。Swift語言(或Objective-C)的方法是訊息傳遞(message passing)的機制,在名稱的設計上是很特別的,如果你把所有叫tableView開頭的方法列出來,在UITableViewDataSource裡有9個,在UITableViewDelegate中有30多個,它的方法不是這樣看的,開頭大概只能說明它的"開頭"或針對的對象是哪一種實例,用途是看接下來的傳入參數與回傳值,方法的整個名稱應該是要包含接下來參數名稱在內。tableView:cellForRowAtIndexPath:說明文件: