iT邦幫忙

2022 iThome 鐵人賽

DAY 18
0
Mobile Development

如何成為IOS初級工程師系列 第 18

Day-18 請別人做事要有禮貌啊 - Delegatation Pattern

  • 分享至 

  • xImage
  •  

今天要來介紹一個在swift很常見的一種設計模式 - Delegate, 科普一下什麼是設計模式:是對軟體設計中普遍存在的各種問題,所提出的解決方案,簡單來說就是用來解決麻煩的問題的啦~。設計模式還有其他20幾種,有興趣的人可以去研究哦。

進入正題

委託模式(Delegate)

delegate使對象能夠使用另一個對象來提供data或其他任務,而不是自己執行任務。簡單來說就是把特定的工作丟給別人完成。delegate包含三個部分

需要委託的對象:

委託通常作為弱屬性持有,以避免委託對象保留委託的保留循環,委託保留委託對象。

委託協議(delegate protocol):

它定義了delegate應該實現的方法。通過使用委託協議而不是具體對象,實現更加靈活:任何實現協議的對像都可以用作委託!

代理對象:

它是實現委託協議的輔助對象。

什麼時候要用?

通常如果是很大的class要拆開來時,或是要創建通用的、可以重複使用的component就會使用delegate。像是TableView的DataSource命名的對象實際上都遵循委託模式,UITableViewDataSource應該提供UITableViewCells來顯示。
但我們新手剛開始會用到delegate的地方應該都是資料回傳、頁面傳值。下面我們實際帶大家做一次。
假設我們已經建立一個新的專案

protocol passValueDelegate {          //委託協議(delegate protocol)
    func receiveValue(value: Int)
}

class ViewController: passValueDelegate {     //初始頁面
    func receiveValue(value: Int){
        print("收到值了:\(value)")
    }
}
 
class SecondViewController {                 //第二個頁面,要傳值回去給初始頁面
    weak var delegate: passValueDelegate?
    
    func handlePassVlaue(){                 //製作傳值的方法,然後看你要在哪觸發這個方法就可以囉
        delegate?.receiveValue(value: 5)
    }
}

因為已經有很多人寫過delegate的文章,如果想要深入了解的話,可以看看我老師寫的文章,或是這個同學的文章用實際生活解釋delegate,可以看看唷~


上一篇
Day-17 ViewController的容器 - UITabBarController, UINavigationController
下一篇
Day-19 記憶體管理 - ARC
系列文
如何成為IOS初級工程師30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言