标签:
其实闭包就是函数
作为条件的函数
首先声明一个数组
var names = ["Charis", "Alex", "Ewa", "Barry", "Daniella"]
将这个数组按照字母排序
声明一个闭包函数
func backwards(s1: String, s2:String) -> Bool {
return s1 > s2
}
sorted()函数返回一个数组,sort()函数返回空,排序自身
///传入闭包函数
names.sort(backwards)
//闭包表达式就是一个函数在花括号里面
names.sort({(s1: String, s2: String) -> Bool in return s1 > s2})
上面的又可以简化
var reversed = names.sorted({s1, s2 in return s1 > s2})
//会隐式return
names.sorted({s1, s2 in s1 > s2})
names.sort({$0 > $1})
names.sort(>)
有时候闭包表达式太麻烦,可以把闭包写在调用函数后面的花括号中
//调用sort函数,后面添加花括号,然后闭包表达式就写在这里
names.sort() {$0 > $1}
官方例子
//声明一个字典
let digitNames = [0:"zero", 1:"one", 2:"two", 3:"three", 4:"four", 5:"five", 6:"six", 7:"seven", 8:"eight", 9:"nine"]
//一个数组
let numbers = [16, 58, 510]
//调用map函数,里面传入闭包
let strings = numbers.map{
//传入一个number返回一个String
(var number) -> String in
var output = ""
while number > 0 {
output = digitNames[number % 10]! + output//找到每一个数字,转为字符串
number /= 10
}
return output
}
首先闭包是引用类型
官方例子
///定义一个返回() -> Int 类型的函数
func makeIncrementor(forIncrement amount:Int) -> () -> Int {
var runningTotal = 0
//一个闭包函数
func incrementor() -> Int {
runningTotal += amount;
return runningTotal
}
//返回这个闭包,此时这个闭包已经包含runningTotal和amount的值
return incrementor
}
let incrementByTen1 = makeIncrementor(forIncrement: 10)
let incrementByTen2 = makeIncrementor(forIncrement: 1)
incrementByTen1() //10 所以值会被闭包一直保留
incrementByTen1() //20
incrementByTen2() //1
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/ttf1993/article/details/46729983