入门级
此处只简单举例并不深究,深究我也深究不来。对于初学者来说delegate或block都不是一下子能理解的,所以我的建议和体会就是,理不理解咱先不说,我先把这个格式记住,对就是格式,delegate或block都是高度格式化的,用的多了自然而然不理解也就理解了
场景:从 B
-> A
传值,开发中必不可少的业务需求,经常会有在B
页面干完一些事情之后告诉A
页面或者传值到A
页面。
下面这个例子就是当B
页面dismiss
时将值传到A
页面
Block
1. 在B中声明一个block
typealias TestBlock = (String)->()
2. 持有一个block变量
var blo: TestBlock?
3. 调用
self.blo?("It is block test")
4. 在`A`中需要接受值的地方
let b = B()
b.blo = {str in
print("test block---\\(str)")
}
delagete
很多初学者一接触到delegate
简直一头雾水,傻傻分不清到底谁是代理。 这里我告诉你一句话,记住了就再也不会有这个疑惑了! 你也不用管谁是代理,这些就是一个叫法而已。
谁要传值谁就拥有代理属性
比如我们这个场景,B
要给A
传值,那B
就拥有代理属性, A
就是B
的代理,很简单吧!
有代理那就离不开协议,所以第一步就是声明协议。在那里声明了?谁拥有代理属性就在那里声明,所以代码就是这样的:
- 在
B
中声明一组协议
protocol BDelegate {
func testDelegate(str: String) -> Void
} - 在
B
中持有delegate属性
weak var delegate: BDelegate?
- 调用
self.delegate?testDelegate("It is delegate test")
- 在
A
中需要接受值的地方
let b = B()
b.delegate = self
// 调用B的协议方法
func testDelegate(str: String) -> Void {
print("test delegate---\(str)")
}
就是这么简单的啦!不信你去看看打印!
尾巴
给初学者,千万不要灰心哦!理不理解只是一个时间问题,noting more,trust yourself