swift3.0 closure 闭包 定义属性 赋值 调用

来源:互联网 发布:sql注入实例代码 编辑:程序博客网 时间:2024/06/05 04:34

有没有遇到过这样的需求:

闭包作为方法的参数用来回调,但是闭包的调用不是在本方内,而是在其他任何可能的地方。这样就需要把这个传进来的闭包保存起来,怎么保存呢?当然是用变量保存,也就是声明一个属性。这就涉及到标题中提到的定义闭包属性,给闭包属性赋值,和在任意其他方法内调用。虽然这些都是基本语法问题,只要熟悉语法就没问题,但就是这swift语法困扰了我好久,因为swift相对来说更新换代太快了,百度 谷歌一顿,虽然有这方面的资料,但都是之前版本,编译器不认。

1. 先来看闭包属性的定义:

var callBack:(([String:AnyObject])->())?

注意:*可选项最好加上,如果不加,编译器非得让你在类初始化方法中对其初始化

     *闭包的参数是根据我自己的需求写的。基本是这样的  (()->())

2. 闭包属性的赋值

    func method(complition:@escaping ([String:AnyObject])->()) {

        callBack = complition  //赋值就这么简单

        .....

    }


注意:*必须用 @escaping 修饰闭包参数,具体为什么请查@escaping语法,笔者也没有理解透,不过如果不加的话编译器会提醒你,并且帮你加上,大神程序员肯定会查个究竟,一般程序员就这样了,然后就没有然后了。

     *定义的闭包和参数闭包必须一模一样:参数类型,参数个数,返回值类型


3. 闭包属性的调用

 self.callBack?([key:value asAnyObject])

注意:*解包是必须的


补充

还有一种定义闭包的方式,类似oc中的typeof,两种方式实现的效果一样

typealias callBackType = ([String:AnyObject])->() //这个是在类外部定义

var callBack:callBackType?


声明:以上是在swift3.0的语法基础上写的!!!


1 0
原创粉丝点击