swift.jpg
入門級
此處只簡單舉例并不深究娩践,深究我也深究不來羡洛。對于初學(xué)者來說delegate或block都不是一下子能理解的危尿,所以我的建議和體會就是燥翅,理不理解咱先不說柬讨,我先把這個格式記住档泽,對就是格式瓣蛀,delegate或block都是高度格式化的浑度,用的多了自然而然不理解也就理解了
場景:從 B
-> A
傳值,開發(fā)中必不可少的業(yè)務(wù)需求缎患,經(jīng)常會有在B
頁面干完一些事情之后告訴A
頁面或者傳值到A
頁面慕的。
下面這個例子就是當(dāng)B
頁面dismiss
時將值傳到A
頁面
Block
1. 在B中聲明一個block
typealias TestBlock = (String)->()
2. 持有一個block變量
var blo: TestBlock?
3. 調(diào)用
self.blo?("It is block test")
4. 在`A`中需要接受值的地方
let b = B()
b.blo = {str in
print("test block---\\(str)")
}
delagete
很多初學(xué)者一接觸到delegate
簡直一頭霧水,傻傻分不清到底誰是代理挤渔。 這里我告訴你一句話肮街,記住了就再也不會有這個疑惑了! 你也不用管誰是代理,這些就是一個叫法而已判导。
誰要傳值誰就擁有代理屬性
比如我們這個場景嫉父,B
要給A
傳值,那B
就擁有代理屬性眼刃, A
就是B
的代理绕辖,很簡單吧!
有代理那就離不開協(xié)議擂红,所以第一步就是聲明協(xié)議仪际。在那里聲明了?誰擁有代理屬性就在那里聲明昵骤,所以代碼就是這樣的:
- 在
B
中聲明一組協(xié)議
protocol BDelegate {
func testDelegate(str: String) -> Void
} - 在
B
中持有delegate屬性
weak var delegate: BDelegate?
- 調(diào)用
self.delegate?testDelegate("It is delegate test")
- 在
A
中需要接受值的地方
let b = B()
b.delegate = self
// 調(diào)用B的協(xié)議方法
func testDelegate(str: String) -> Void {
print("test delegate---\(str)")
}
就是這么簡單的啦树碱!不信你去看看打印变秦!
尾巴
給初學(xué)者成榜,千萬不要灰心哦!理不理解只是一個時間問題伴栓,noting more伦连,trust yourself