美文网首页IOS理论知识
SWIFT 闭包传值方式

SWIFT 闭包传值方式

作者: 真爱要有你才完美 | 来源:发表于2017-05-22 16:05 被阅读182次

    闭包传值

    闭包主要用于回调,这里我们还是模拟从详情界面传值到主界面,首先我们需要在详情界面为闭包取个别名,声明一个闭包类型,如下所示:

    // 1、声明闭包类型

    typealias Closure=(String?)->Void

    其次在详情界面控制器中,声明闭包属性:

    // 2、声明闭包属性

    varclosure: Closure!

    接下来,我们需要为详情界面声明一个闭包回调的方法,用于在主界面中调用,并且为闭包属性赋值,如下所示:

    // MARK:- closure send values methods

    -// 3、闭包传值调用方法

    func callBack(closure: Closure!)

    {

    // 4、赋值闭包属性

    self.closure = closure

    }

    现在闭包属性已经有值了,我们还需要在处理界面返回的方法中实现回调传值的逻辑,同样的,闭包类型为可选类型,我们可通过可选绑定判断闭包属性是否有值,如果有值,则通过闭包将需要传递到主界面的数据传递出去,代码如下:

    func respondsToBtn(sender:UIButton) {

    //5、可选绑定:判断closure属性是否不为nil,如果不为nil,则通过closure将文本信息回调到调用closure方法所在的控制器中;

    if   let closure =self.closure {     

      closure(self.textField.text) 

                          }

    self.dismissViewControllerAnimated(true,completion:nil)

    }

    现在详情界面已经配置完毕,最后一步,我们在主界面推送到详情界面的方法中,通过实例化的详情界面对象,调用闭包回调方法,然后打印数据即可,该方法在详情界面返回到主界面的时候会直接被调用,代码如下:

    // MARK:- Events -func respondsToBtn(sender: UIButton) {letdetail_vc=DetailViewController()    detail_vc.callBack { (value:String?)->Voidinprint(value!)    }self.presentViewController(detail_vc, animated:true, completion: nil)}

    Tips:

    1、为闭包取别名,可在参数列表中将需要传递的参数写成形参;

    2、设置一个方法持有当前block;

    3、在合适的地方进行调用类似于代理;

    4、在创建该对象的地方进行闭包方面的调用;

    相关文章

      网友评论

        本文标题:SWIFT 闭包传值方式

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