Swift使用闭包传值

我们经常遇到这样一个场景:
自定义的View类中需要定义点击事件,跳转到新的视图控制器,而这时候就需要我们定义一个协议,让ViewController去实现对应的方法;
使用代理传值是我们常用的办法,同时我们还可以使用闭包,这样的写法更加简单直观,也更便于理解:

//
//  ViewController.swift
//  DemoLearn
//
//  Created by LY on 2018/4/8.
//  Copyright © 2018年 刘. All rights reserved.
//

import UIKit

//使用闭包传值
typealias MyBlock = (_ message:UIViewController)->(Void)


class mv:UIView{
    var mb:MyBlock?
    
    //假装我有一个button添加了点击事件
    
    
   @objc func buttonClick(){
    if mb != nil{
        mb!(SecendViewController())
        
    }
    }
    
}

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        let vv  = mv()
        self.view.addSubview(vv)
        vv.mb = {(message:UIViewController)->(Void) in
            self.present(message, animated: true, completion: nil)
            
        }
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}


你可能感兴趣的:(Swift使用闭包传值)