美文网首页
Swift代理和闭包简单实现反向传值

Swift代理和闭包简单实现反向传值

作者: 这个熊孩子不太冷 | 来源:发表于2017-07-24 18:37 被阅读20次

    一、代理实现方法:

    委托方:

    创建协议 、声明协议方法

    protocol DemoDelegateProtocal : NSObjectProtocol {
        func delegateData(data:String)
    }```
    
    创建一个代理属性
    

    var mDelegate: DemoDelegateProtocal?```

    执行协议方法

    self.mDelegate?.delegateData(data: "需要返回的值")```
    
    #####代理方:
    继承协议 
    

    class MainViewController : UIViewController, DemoDelegateProtocal```

    将代理设为自己

    delegateVC.mDelegate = self```
    
    实现代理方法
    

    func delegateData(data: String) {
    print("(data)")
    }```

    我在实现代理方法的时候如下处理:
    //Swift的扩展extension可以用来继承协议,实现代码隔离,便于维护
    extension MainViewController: DemoDelegateProtocal{
        //实现代理方法
        func delegateData(data: String) {
            print("\(data)")
        }
    }```
    ##二、闭包实现方法:
    
    利用typealias为闭包类型定义别名
    这里先介绍一下 typealias的使用 : typealias是Swift中用来为已经存在的类型重新定义名字的关键字(类似于OC语法中的 typedef),重新命名的新名字用来替代之前的类型,并且能够使代码变得更加清晰简单容易理解。typealias 的用法很简单,直接用 = 赋值就可以了:
    

    typealias DataFromClosure = (String) -> Void```

    声明

    var mClosure : DataFromClosure?```
    
    实现
    

    if (self.mClosure != nil) {
    self.mClosure!("需要传的值")
    }```

    调用

    secondVC.mClosure = {
          (data:String) -> Void in
          print("需要的值 \(data) ")
     }```
    

    相关文章

      网友评论

          本文标题:Swift代理和闭包简单实现反向传值

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