一、什么是 delegate 模式
所謂 delegate 就是代理模式。簡單來說,delegate 模式就是在類的函數里運行完一段代碼后,你可以通過一個符合某個代理協議的屬性來調代理的方法。其中,代理方法就是回調函數。
二、delegate 模式與閉包比的優勢
如果只看 delegate 與 閉包對同一個函數的影響,其實 delegate 和閉包并沒有什么區別。但如果對于多個類來說,delegate 可以由于有一個類是專門存協議函數的實現的,因此多個函數在調同一個回調函數時,我們就不用像傳閉包那樣需要寫多個相同的閉包了,直接調代理協議里的函數就行了。
三、delegate 模式的組成
delegate 模式由 3 樣東西組成:類專用的代理協議、有符合代理協議的屬性的類、代理方法的實現的類。
四、如何實現?delegate 模式
protocol DelegateProtocol: AnyObject { // 類專屬的代理協議func sig1()func sig2()
}class Delegated { // 被代理的類weak var delegate: DelegateProtocol?func foo() {// ... 一段代碼delegate?.sig1() // 調代理方法,可以理解成回調函數的一種}
}class Delegate: DelegateProtocol { // 這個代理類就是專門存回調函數的實現的func sig1() {print("sig1")}func sig2() {print("sig2")}
}