swift中delegate与block的反向传值

作者: 行走的乌鸦 | 来源:发表于2015-11-23 19:32 被阅读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

    相关文章

      网友评论

      • 鱼骨头TO:大神,按照你的方法运行,结果A中的代理方法更本没运行起来,这个是什么原因?
        func testDelegate(str: String) -> Void {
        print("test delegate---\\(str)")
        }
        笨笨编程:@鱼骨头TO 遵守协议~实现方法

      本文标题:swift中delegate与block的反向传值

      本文链接:https://www.haomeiwen.com/subject/mierhttx.html