函数闭包--swift3 learnning notes
2016-09-26 本文已影响0人
ryanzl
//函数实际是一种特殊的闭包,它是一段能之后被调取的代码
//--函数可以带有可变个数的参数,这些参数在函数内表现为数组的形式:
func sumOf(numbers: Int...) -> Int {
var sum = 0
for num in numbers {
sum += num
}
return sum
}
sumOf()
sumOf(numbers: 1,2,3)
//--函数可以嵌套
func returnFifteen() -> Int {
var y = 10
func add() {
y += 5
}
add()
return y
}
returnFifteen()
//--函数是第一等类型,这意味着函数可以作为另一个函数的返回值。
func makeIncrementer() -> ((Int) -> Int) {
func addOne(number: Int) -> Int {
return 1 + number
}
return addOne
}
var increment = makeIncrementer()//调用 makeIncrementer 函数, 返回 (Int) -> Int 类型的函数
increment(7)
increment(1)
//--函数也可以当做参数传入另一个函数。
func hasAnyMatches(list: [Int],condition: (Int) -> Bool) -> Bool {
for item in list {
if condition(item) {
return true
}
}
return false
}
func lessThanTen(number: Int) -> Bool {
return number < 10
}
var numbers = [20,1,23,7]
hasAnyMatches(list: numbers, condition: lessThanTen)
//--使用{}来创建一个匿名闭包,使用in将参数和返回值类型声明与闭包函数体进行分离。
numbers.map({
(number: Int) -> Int in
let ret = 1 + number
return ret
})
//--简写闭包,忽略参数的类型和返回值。单个语句闭包会把它语句的值当做结果返回。
let mapNums = numbers.map({
num in num + 2
})
print(mapNums)
//--通过参数位置而不是参数名字来引用参数
let sortedNums = numbers.sorted { (num1, num2) -> Bool in
num1 > num2
}
let sortedShortNums = numbers.sorted(by: {$0 > $1})
print(sortedNums)
print(sortedShortNums)
//--函数类型 (Function Types)
每个函数都有种特定的函数类型,函数的类型由函数的参数类型和返回类型组成。例如:
(Int, Int) -> Int :两个Int参数,Int返回值
() -> Void :无参数,无返回值