iOS学习码农的日常之swift开发征服Swift

swift中delegate与block的反向传值

2015-11-23  本文已影响3624人  行走的乌鸦
swift.jpg

入门级


此处只简单举例并不深究,深究我也深究不来。对于初学者来说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的代理,很简单吧!

有代理那就离不开协议,所以第一步就是声明协议。在那里声明了?谁拥有代理属性就在那里声明,所以代码就是这样的:

  1. B中声明一组协议
    protocol BDelegate {
    func testDelegate(str: String) -> Void
    }
  2. B中持有delegate属性
    weak var delegate: BDelegate?
  3. 调用
    self.delegate?testDelegate("It is delegate test")
  4. A中需要接受值的地方
    let b = B()
    b.delegate = self
    // 调用B的协议方法
    func testDelegate(str: String) -> Void {
    print("test delegate---\(str)")
    }

就是这么简单的啦!不信你去看看打印!

尾巴


给初学者,千万不要灰心哦!理不理解只是一个时间问题,noting more,trust yourself

上一篇下一篇

猜你喜欢

热点阅读