//函數(shù)實際是一種特殊的閉包间景,它是一段能之后被調取的代碼
//--函數(shù)可以帶有可變個數(shù)的參數(shù)酌予,這些參數(shù)在函數(shù)內表現(xiàn)為數(shù)組的形式:
func sumOf(numbers: Int...) -> Int {
var sum = 0
for num in numbers {
sum += num
}
return sum
}
sumOf()
sumOf(numbers: 1,2,3)
//--函數(shù)可以嵌套
func returnFifteen() -> Int {
var y = 10
func add() {
y += 5
}
add()
return y
}
returnFifteen()
//--函數(shù)是第一等類型,這意味著函數(shù)可以作為另一個函數(shù)的返回值垦缅。
func makeIncrementer() -> ((Int) -> Int) {
func addOne(number: Int) -> Int {
return 1 + number
}
return addOne
}
var increment = makeIncrementer()//調用 makeIncrementer 函數(shù)某残, 返回 (Int) -> Int 類型的函數(shù)
increment(7)
increment(1)
//--函數(shù)也可以當做參數(shù)傳入另一個函數(shù)译荞。
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)
//--使用{}來創(chuàng)建一個匿名閉包,使用in將參數(shù)和返回值類型聲明與閉包函數(shù)體進行分離忿晕。
numbers.map({
(number: Int) -> Int in
let ret = 1 + number
return ret
})
//--簡寫閉包装诡,忽略參數(shù)的類型和返回值。單個語句閉包會把它語句的值當做結果返回践盼。
let mapNums = numbers.map({
num in num + 2
})
print(mapNums)
//--通過參數(shù)位置而不是參數(shù)名字來引用參數(shù)
let sortedNums = numbers.sorted { (num1, num2) -> Bool in
num1 > num2
}
let sortedShortNums = numbers.sorted(by: {$0 > $1})
print(sortedNums)
print(sortedShortNums)
//--函數(shù)類型 (Function Types)
每個函數(shù)都有種特定的函數(shù)類型鸦采,函數(shù)的類型由函數(shù)的參數(shù)類型和返回類型組成。例如:
(Int, Int) -> Int :兩個Int參數(shù)咕幻,Int返回值
() -> Void :無參數(shù)渔伯,無返回值