您的位置:首页 > 移动开发 > Swift

SWIFT——闭包表达式

2015-11-15 15:29 453 查看
闭包,可以理解为使用花括号括起来的一段代码。

下面的都属于闭包

全局函数

嵌套函数

闭包表达式

闭包表达式可以用来简化代码,使代码更简洁

var names = ["Mike","John","Mary","Tom","Bill"]

func sortFun(s1:String, s2:String) -> Bool
{
return s1 < s2
}

sort(&names, sortFun)          //sort函数后一参数表示排序的方法,采用了一个函数形式定义方法
println(names)       //Bill, John, Mary, Mike, Tom


下面用闭包表达式来简化

闭包表达式:

/*
{
(parameters) -> returnType in statements
}
*/


// 第1步

sort(&names, {(s1:String,s2:String) -> Bool in return s1 < s2})

//第2步

sort(&names,{(s1,s2) -> Bool in return s1 < s2})

//第3步

sort(&names,{(s1,s2) in return s1 < s2})

//第4步

sort(&names,{(s1,s2) in s1 < s2})

//第5步

sort(&names,{$0 < $1})

//第6步

sort(&names, <)


最终可以简化成为sort(&names,<)这里swift除了<号无法推断出来,其他的值都可以根据sort所比较的内容进行推断。

//挂尾闭包

let englishdict = [
0:"zero"
1:"one"
2:"two"
3:"three"
4:"four"
5:"five"
6:"six"
7:"seven"
8:"eight"
9:"nine"
]

let stru = [20,300,78,56,13425,7,17]

println(stru.map() //map是一个transform从int到U的函数,后面加{}进行挂尾闭包表达式来控制希望怎么transform。{}内也是() -> xxx in statement的。
{
(var charac) -> String in var outcharac = ""
while charac > 0
{
outcharac = englishdict[charac%10]! + " " + outcharac
charac /= 10
}
return outcharac
}
)//[two zero , three zero zero , seven eight , five six , one three four two five , seven , one seven ]


闭包——值捕获

func summ(#incre:Int) ->() -> Int
{
var summa = 0
func summar() -> Int
{
summa += incre
return summa
}
return summar
}

let a = summ(incre: 8)

println(a())                //8
println(a())               //16
println(a())              //24

let b = summ(incre: 10)
println(b())               //10
println(b())               //20
println(a())               //32

let c = a
println(c())                //40
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: