今天要來介紹一個在swift很常見的一種設計模式 - Delegate, 科普一下什麼是設計模式:是對軟體設計中普遍存在的各種問題,所提出的解決方案,簡單來說就是用來解決麻煩的問題的啦~。設計模式還有其他20幾種,有興趣的人可以去研究哦。
delegate使對象能夠使用另一個對象來提供data或其他任務,而不是自己執行任務。簡單來說就是把特定的工作丟給別人完成。delegate包含三個部分
委託通常作為弱屬性持有,以避免委託對象保留委託的保留循環,委託保留委託對象。
它定義了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,可以看看唷~