//闭包
//1.定义:接近变量和常量(函数是一种特殊形式的闭包)
//闭包表达式:封闭的能捕获它周围的常量、变量值的,lightweight一个非常简洁,言简意赅的表达式,它的特点有clean,clear
//优化:1.它可以根据周围的内容来对它自身的闭包表达式的参数或者类型进行推断
// 2.它不是直接的返回一个表达式的值
// 3.它的参数非常容易速记
// 4.挂尾
//2.sorted函数:是对一个数组进行排序,sorted函数第一个函数要求是数组,第二个函数要求是闭包表达式
let 城市列表 = ["Beijing","NewYork","Paris","Shenzhen","Shanghai"]
func 字母靠后(字符串1:String , 字符串2:String) -> Bool{
return 字符串1 > 字符串2
}
var 新城市列表 = sorted(城市列表,字母靠后)
println("城市列表为:\(城市列表),新城市列表为:\(新城市列表)")
//城市列表为:[Beijing, New York, Paris, Shenzhen, Shanghai],新城市列表为:[Shenzhen, Shanghai, Paris, New York,Beijing]
//3.闭包表达式({(字符串1:String , 字符串2:String) -> Bool in return 字符串1 > 字符串2}--->闭包)
var 新城市列表2 = sorted(城市列表, {(字符串1:String , 字符串2:String) -> Bool inreturn 字符串1 > 字符串2
})
println("城市列表为:\(城市列表),新城市列表为:\(新城市列表2)")
//城市列表为:[Beijing, New York, Paris, Shenzhen, Shanghai],新城市列表为:[Shenzhen, Shanghai, Paris, New York,Beijing]
//4.闭包参数类型推断(把字符串的类型省略了)
var 新城市列表3 = sorted(城市列表, {(字符串1, 字符串2) ->Bool in return字符串1 > 字符串2
})
println("城市列表为:\(城市列表),新城市列表为:\(新城市列表3)")
//城市列表为:[Beijing, New York, Paris, Shenzhen, Shanghai],新城市列表为:[Shenzhen, Shanghai, Paris, New York,Beijing]
//5.闭包单行间接返回(当只有一行表达式的时候可以省略return)
var 新城市列表4 = sorted(城市列表, {(字符串1, 字符串2) ->Bool in 字符串1 > 字符串2
})
println("城市列表为:\(城市列表),新城市列表为:\(新城市列表4)")
//城市列表为:[Beijing, New York, Paris, Shenzhen, Shanghai],新城市列表为:[Shenzhen, Shanghai, Paris, New York,Beijing]
//6.闭包参数简写
var 新城市列表5 = sorted(城市列表, {$0> $1})
println("城市列表为:\(城市列表),新城市列表为:\(新城市列表5)")
//城市列表为:[Beijing, New York, Paris, Shenzhen, Shanghai],新城市列表为:[Shenzhen, Shanghai, Paris, New York,Beijing]
//7.操作符函数(>等操作符本来就是一个函数,连参数和函数体({})都可以省略了)
var 新城市列表6 = sorted(城市列表, >)
println("城市列表为:\(城市列表),新城市列表为:\(新城市列表6)")
//城市列表为:[Beijing, New York, Paris, Shenzhen, Shanghai],新城市列表为:[Shenzhen, Shanghai, Paris, New York,Beijing]
闭包就讲到这里了哈,如果有不全的请多多见谅哈!