函数也是一种闭包
import UIKit
// 函数也是一种闭包
func backward(s1: String, s2: String) -> Bool {
return s1 > s2
}
let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
var reversedNames = names.sort(backward)
print("函数也是一种闭包")
print(reversedNames)
console log 如下
函数也是一种闭包.png
闭包表达式
// 闭包表达式
/*
* { (parameters) -> return type in
* statements
* }
*/
reversedNames = names.sort({
(s1: String, s2: String) -> Bool in
return s1 > s2
})
print("闭包表达式")
print(reversedNames)
console log 如下
闭包表达式.png
闭包中的参数类型推断
// 闭包中的参数类型推断
reversedNames = names.sort({
(s1, s2) -> Bool in
return s1 > s2
})
print("闭包中的参数类型推断")
print(reversedNames)
console log 如下
闭包中的参数类型推断.png
闭包中参数类型和返回类型的推断
// 闭包中参数类型和返回类型的推断
reversedNames = names.sort({
s1, s2 in
return s1 > s2
})
print("闭包中参数类型和返回类型的推断")
print(reversedNames)
console log 如下
闭包中参数类型和返回类型的推断.png
闭包中只有单行表达式省略掉return关键字
// 闭包中只有单行表达式省略掉return关键字
reversedNames = names.sort({
s1, s2 in
s1 > s2
})
print("闭包中只有单行表达式省略掉return关键字")
print(reversedNames)
console log 如下
闭包中只有单行表达式省略掉return关键字.png
闭包中参数简写
// 闭包中参数简写
reversedNames = names.sort({
$0 > $1
})
print("闭包中参数简写")
print(reversedNames)
console log 如下
闭包中参数简写.png
操作符函数
// 操作符函数
reversedNames = names.sort(>)
print("操作符函数")
print(reversedNames)
console log 如下
操作符函数.png
挂尾闭包
// 挂尾闭包
reversedNames = names.sort() {
$0 > $1
}
print("挂尾闭包")
print(reversedNames)
console log 如下
挂尾闭包.png
挂尾闭包只有一个参数
// 挂尾闭包只有一个参数
reversedNames = names.sort {
$0 > $1
}
print("挂尾闭包只有一个参数")
print(reversedNames)
console log 如下
挂尾闭包只有一个参数.png
挂尾闭包例子
// 挂尾闭包例子
let digitNames = [
0: "Zero", 1: "One", 2: "Two", 3: "Three", 4: "Four",
5: "Five", 6: "Six", 7: "Seven", 8: "Eight", 9: "Nine"]
let numbers = [1992, 8, 5, 520]
var strings = numbers.map {
(number) -> String in
var number = number
var output = ""
while number > 0 {
output = digitNames[number % 10]! + output
number /= 10
}
return output
}
print("挂尾闭包例子")
print(strings)
console log 如下
挂尾闭包例子.png
值捕获
// 值捕获
func makeIncrementer(amount: Int) -> () -> Int {
var runningTotal = 0
func incrementer() -> Int {
runningTotal += amount
return runningTotal
}
return incrementer
}
print("值捕获")
let incrementByTen = makeIncrementer(10)
print(incrementByTen())
print(incrementByTen())
print(incrementByTen())
let incrementBySeven = makeIncrementer(7)
print(incrementBySeven())
print(incrementBySeven())
print(incrementBySeven())
console log 如下
值捕获.png
网友评论