函数也可以作为一个类型(引用类型)
func add (_ a: Int, _ b: Int) -> Int
{
return a + b
}
let anotherAdd = add // let anotherAdd: (Int, Int) -> Int = add 等同于, 这里的 add 函数作为一个类型
anotherAdd(2, 4)
`_` 表示忽略参数名 `= 99999, =1000` 表示默认值
func add(_ num1: Int = 99999, _ num2: Int = 1000) -> Int
{
return num1 + num2
}
add(2, 3)
add(2)
// 这里调用 是因为有默认参数
add()
// 这里的 `and` 是外部参数名
func add(_ num1: Int = 99999, _ num2: Int = 1000, and num3: Int) -> Int
{
return num1 + num2 + num3
}
add(and: 3)
add(2, 3, and: 4)
变长的参数类型
一个函数最多只有一个变长的参数类型
func mean (_ numbers: Int ...) -> Int
{
var sumValue = 0
for num in numbers {
sumValue += num
}
return sumValue
}
// 这里可以传入多个值
mean(2, 4, 6, 8, 10)
交换2个数的值
inout
代表传入地址, 加上这个关键字后可以改变出入的参数值
func swapValues (_ num1: inout Int, _ num2: inout Int)
{
let temp: Int = num1
num1 = num2
num2 = temp
}
var X: Int = 100, Y: Int = 200
swapValues(&X, &Y)
X
Y
参数是函数
func calculate(scores: inout [Int] , changeValue: (Int) -> Int) {
for (index, score) in scores.enumerated() {
scores[index] = changeValue(score);
}
print(scores)
}
func changeValue(value: Int) -> Int {
return value * 10
}
var score: [Int] = [1, 2, 3, 4, 5]
// 调用
calculate(scores: &score, changeValue: changeValue)
执行结果:[10, 20, 30, 40, 50]
高阶函数
高阶函数map、flatMap、filter、reduce
map: 可以对数组中的每一个元素做一次处理\
let scores = [40, 89, 100, 78, 97, 50]
func isPass (score: Int) -> Bool
{
return score < 60
}
scores.map(isPass) // [true, false, false, false, false]
filer:过滤,可以对数组中的元素按照某种规则进行一次过滤
let scores = [40, 89, 100, 78, 97, 50]
func isPass (score: Int) -> Bool
{
return score < 60
}
scores.filter(isPass) // [40, 50]
reduce:计算,可以对数组的元素进行计算
func joint (string: String, num: Int) -> String
{
return string + String(num) + ","
}
scores.reduce("", joint) // 40,89,100,78,97,50,
网友评论