swift语言闭包闭包表达式swift语言入门很简单大学霸

swift语言闭包闭包表达式swift语言入门很简单大学霸

Swift语言快速入门v3.0

Swift语言快速入门v3.0

7.9  闭包swift语言闭包闭包表达式swift语言入门很简单大学霸

闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift中的闭包与C和Objective-C中的代码块(blocks)以及其他一些编程语言中的Lambda函数比较相似。在本章中所讲的函数其实就是特殊的闭包。本节主要讲解关于闭包的基本使用。

7.9.1  闭包表达式swift语言闭包闭包表达式swift语言入门很简单大学霸

闭包表达式是一种利用简洁语法构建内联(内联类似与C语言中的宏定义)闭包的方式。以下这个代码是对两个字符串的比较。

import Foundation

//判断两个字符串的大小

func compare(s1: String, s2: String) -> Bool {

return s1 > s2

}

let str1=”Hello”

let str2=”Swift”

if compare(str1,str2) {

println(“str1大于str2”)

}else{

println(“str1小于str2″)

}

运行结果如下:

str1小于str2

Program ended with exit code: 0

在此代码中,当调用函数compare()时,会将str1和str2传递到给函数在定义时的参数s1,s2中,然后进行比较。在此代码中可以看到,在compare()函数中执行了一行代码,就是判断并返回,显的此函数相当冗长。此时就可以使用闭包表达式使用代码变得更好。首先,来看一下闭包表达式(闭包函数)的语法形式。

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

语句

}

其中,参数可以是常量、变量和输入-输出参数,但没有默认值。开发者也可以在参数列表的最后使用可变参数。而元组也可以作为参数和返回值。关键字in表示闭包的参数和返回值类型定义已经完成,闭包函数体即将开始。

1.无参形式的闭包表达式

无参形式的闭包表达式语法形式如下:

{()->返回值类型 in

语句

}

它定义的语法形式如下swift语言闭包闭包表达式swift语言入门很简单大学霸:

let/var 闭包表达式常量名称/闭包表达式变量名称/=无参形式的闭包表达式

它调用的语法形式如下:

闭包表达式常量名称/闭包表达式变量名称()

【示例7-28】以下将使用闭包表达式实现字符串”aaaa”的输出。代码如下:

import Foundation

//输出字符串”aaaa”

var str={() in

println(“aaaa”)

}

str()                                                //调用的调用形式swift语言闭包闭包表达式swift语言入门很简单大学霸

运行结果如下:

aaaa

Program ended with exit code: 0

2.具有参数的闭包表达式

具有参数的闭包表达式有两种形式一种是最常用的只有一个参数的闭包表达式;一种是具有多个参数的闭包表达式。以下是对这两种具有参数的闭包表达式的详细讲解。

(1)具有一个参数的闭包表达式

具有一个参数的闭包表达式的语法形式如下:

{(参数名:数据类型)->返回值类型 in

语句

}

它定义的语法形式如下:

let/var 闭包表达式常量名称/闭包表达式变量名称/=具有一个参数的闭包表达式

它的调用形式如下:

闭包表达式常量名称/闭包表达式变量名称()

【示例7-29】以下将使用闭包表达式输出指定字符串。代码如下:

import Foundation

//输出指定的字符串

var str={(str:String) in

    println(str)

}

str(“Hello”)

运行结果如下:

Hello

Program ended with exit code: 0

(2)具有多个参数的闭包表达式

具有多个参数的闭包表达式的语法形式如下:

{(参数名1:数据类型,参数名2:数据类型,…)->返回值类型 in

语句

}

它定义的语法形式如下:

let/var 闭包表达式常量名称/闭包表达式变量名称/=具有多个参数的闭包表达式

它的调用形式如下:

闭包表达式常量名称/闭包表达式变量名称()

【示例7-30】使用闭包实现对两个任意数的求和计算,代码如下:

import Foundation

//实现求两个数的和

var reversed = {(s1: Int, s2: Int) -> Int in

var sum=s1+s2

return sum

}

println(reversed(10,20))

运行结果如下:

30

Program ended with exit code: 0

其实闭包表达式最长用在其他的函数中,并不是单独的去使用它。

【示例7-31】以下代码将闭包表达式作为函数的一部分,来实现在判断在数组中是否有大于500或者40的元素。代码如下:

import Foundation

//定义函数

func copare(arr:[Int],value:Int,cb:(Num:Int,Value:Int)->Bool)->Bool{

   //遍历数组swift语言闭包闭包表达式swift语言入门很简单大学霸

for item in arr{

   //判断闭是否为真

        if(cb(Num: item,Value: value)){

            return true

        }

    }

    return false

}

var array = [20,80,100,50,20]

//使用闭包判断是否在数组中有大于500的元素

var v1=copare(array,500,{(num:Int,value:Int)->Bool in

    return num>value

})

//判断结果并输出·

if  v1==true {

println(“数组array中有比500大的元素”)

}else{

println(“数组array中没有比500大的元素”)

}

//使用闭包判断是否在数组中有大于40的元素

var v2=copare(array,40,{(num:Int,value:Int)->Bool in

    return num>value

})

//判断结果并输出

if  v2==true {

println(“数组array中有比40大的元素”)

}else{

println(“数组array中没有比40大的元素”)

}

在此代码中,当调用copare()函数时,会将参数array、40以及闭包表达式传递到函数定义的参数中,在copare()函数中,遍历数组中元素的时候,又会去调用闭包表达式。运行结果如下swift语言闭包闭包表达式swift语言入门很简单大学霸:

数组array中没有比500大的元素

数组array中有比40大的元素

Program ended with exit code: 0

swift语言闭包闭包表达式swift语言入门很简单大学霸

Comments are closed.