美文网首页
在Swift中同时用代理和Block(Closure)回调

在Swift中同时用代理和Block(Closure)回调

作者: GhostClock | 来源:发表于2017-11-02 22:19 被阅读15次

    目的:

    A页面push到B页面,点击B页面的按钮传值到A页面,分别用delegate和Block来实现 

    1.在页面B定义delegate和Block

    ```

    importUIKit

    @objcprotocolDetailedViewControllerDelegate {

    @objcoptionalfuncchangeValue (value:Int) ->Void;

    }

    classDetailedViewController:UIViewController{

    var_title:String?

    vardelegate:DetailedViewControllerDelegate?

    varcount:Int=0

    varchangeBlock:((Int) -> ())?

    overridefuncviewDidLoad() {

    super.viewDidLoad()

    navigationItem.title=_title

    self.view.backgroundColor=UIColor.brown

    weakvarweakSelf =self

    letbtn =CGButton.shendInstance().createButton(frame:CGRect(), bgColor:UIColor.red, title:"按钮", superView:self.view) { (action)in

    weakSelf?.count+=1

    letcout = weakSelf?.count

    // Block回调

    if(weakSelf?.changeBlock! !=nil) {

    weakSelf?.changeBlock!(cout!)

    }

    // 代理回调

    if((weakSelf?.delegate?.changeValue) !=nil) {

    weakSelf?.delegate?.changeValue!(value: cout!)

    }

    }

    btn.snp.makeConstraints{ (make)in

    make.top.equalTo(0)

    make.left.equalTo(100)

    make.width.height.equalTo(100)

    }

    }

    funcchangeValue(value:@escaping(Int) -> ()) ->Void{

    self.changeBlock= value

    }

    }

    ```

    2.在push的时候

    ```

    moiveView.clickdidSelectItemAt{ (collection, indexPath)in

    letdataModel =self._movieView.dataSource[indexPath.item]as!MovieModel

    letDetailedVC =DetailedViewController()

    DetailedVC.delegate=self

    //Block的回调

    DetailedVC.changeValue(value: { (value)in

    print("blockChange\(value)")

    })

    DetailedVC._title= dataModel.titleasString

    self.navigationController!.pushViewController(DetailedVC, animated:true)

    }

    // delegate的回调

    funcchangeValue(value:Int) {

    print("delegateChange\(value)")

    }

    ```

    相关文章

      网友评论

          本文标题:在Swift中同时用代理和Block(Closure)回调

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