Swift 2.0学习笔记(Day 22)——闭包那些事儿!

前端之家收集整理的这篇文章主要介绍了Swift 2.0学习笔记(Day 22)——闭包那些事儿!前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。


@H_404_6@原创文章,欢迎转载。转载请注明:关东升的博客

@H_404_6@我给Swift @H_404_6@中的闭包一个定义:闭包是自包含的匿名函数代码块,可以作为表达式、函数参数和函数返回值,闭包表达式的运算结果是一种函数类型。

Swift@H_404_6@中的闭包类似于Objective-C@H_404_6@中的代码块、Java@H_404_6@中的匿名内部类。

@H_404_6@使用闭包表达式

Swift@H_404_6@中的闭包表达式很灵活,其标准语法格式如下:

{ (参数列表) ->返回值类型 in

语句组

}

@H_404_6@其中,参数列表与函数中的参数列表形式一样,返回值类型类似于函数中的返回值类型,但不同的是后面有in@H_404_6@关键字。

Swift@H_404_6@提供了多种闭包简化写法,我来介绍下面几种不同形式:

1@H_404_6@、类型推断简化

@H_404_6@类型推断是Swift@H_404_6@的强项,Swift@H_404_6@可以根据上下文环境推断出参数类型和返回值类型。以下代码是标准形式的闭包:

{(a:Int,b:Int) -> Intin

return a + b

}

Swift@H_404_6@能推断出参数a@H_404_6@和b@H_404_6@是Int@H_404_6@类型,返回值也是Int@H_404_6@类型。简化形式如下:

{(a,b) in return a + b }

{a,b in return a + b } //参数列表括号也可以省略

2@H_404_6@、隐藏return@H_404_6@关键字

@H_404_6@在闭包内部语句组只有一条语句,如return a + b@H_404_6@等,那么这种语句都是返回语句。前面的关键字return@H_404_6@可以省略,省略形式如下:

{a,b in a + b }

@H_404_6@使用这种简化方式修改后的示例代码如下:

func calculate(opr :String)-> (Int,Int)-> Int {




    var result : (Int,Int)-> Int

    

    switch (opr) {

    case "+" :

        result = {a,b in a + b } //return关键字省略了

    default:

        result = {a,b in a - b } //return关键字省略了

    }

    return result

}

@H_404_6@省略的前提是闭包中只有一条return@H_404_6@语句。

3@H_404_6@、省略@H_404_6@参数名称

Swift@H_404_6@提供了参数名省略功能@H_404_6@,我们可以用$0@H_404_6@、$1@H_404_6@、$2…@H_404_6@来指定闭包中参数,$0@H_404_6@指代第一个参数,$1@H_404_6@指代第二个参数,$2@H_404_6@指代第三个参数,以此类推$n+1@H_404_6@指代第n@H_404_6@个参数。

@H_404_6@使用参数名省略@H_404_6@功能,在闭包中必须省略参数列表定义,Swift@H_404_6@能够推断出这些缩写参数的类型。参数列表省略了,in@H_404_6@关键字也需要省略。参数名省略之后如下所示:

{$0 + $1}

@H_404_6@使用参数名省略后的示例代码如下:

func calculate(opr :String)-> (Int,Int)-> Int {

 

    var result : (Int,Int)-> Int

    

    switch (opr) {

    case "+" :

        result = {$0 + $1} //采用了参数名省略

    default:

        result = {$0 - $1} //采用了参数名省略

    }

    return result

}

 

let f1:(Int,Int)-> Int = calculate("+")

print("10 + 5 = \(f1(10,5))")

 

let f2:(Int,Int)-> Int = calculate("-")

print("10 - 5 = \(f2(10,5))")

4@H_404_6@、使用闭包返回值

@H_404_6@闭包表达本质上是函数类型,是有返回值的,我们可以直接在表达式中使用闭包的返回值。重新修改add@H_404_6@和sub@H_404_6@闭包,示例代码如下:

@H_404_6@

let c1:Int = {(a:Int,b:Int) -> Int in

                 return a + b

               }(10,5)   

 

print("10 + 5 = \(c1)")

 

@H_404_6@解释:给c1@H_404_6@赋值,后面是一个闭包表达式。但是闭包表达式不能直接赋值给c1@H_404_6@,因为c1@H_404_6@是Int@H_404_6@类型,需要闭包的返回值。这就需要在闭包结尾的大括号后面接一对小括号(10,5)@H_404_6@,通过小括号(10,5)@H_404_6@为闭包传递参数。

欢迎关注关东升新浪微博@tony_关东升。
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
更多精品iOSCocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com智捷课堂论坛网站:http://51work6.com/forum.php

猜你在找的Swift相关文章