摘要訊息 : Swift 中的函數教學.
0. 前言
文于 2022 年 3 月 17 日进行一次更新和修正. 修正之后本文已经归档, 不再享受更新.
1. 函数的定义与调用
函數可以定義為
/*func 函数名(参数变量 : 类型, 参数变量 : 类型, ...) -> 返回类型 {
// ...
// 陳述式
return 返回值
}*/
func add(a : Int, b : Int) -> Int {
return a + b;
}
var result = add(a : 5, b : 10); // result 為 15
2. 参数默认值
func sum(number1 : Int = 1, number2 : Int = 1) -> Int {
return number1 + number2
}
let a = sum()
let b = sum(number1 : 10, number2 : 20)
print(a) // 结果 : 2
print(b) // 结果 : 30
3. 可变函数参数
在定义函数的时候, 当不确定参数的具体数量的时候, 可以通过在变量后面加 "..." 从而实现可变参数. 一个函数最多只能有一个可变参数, 并且必须在函数表中最后一个位置 :
func getAverage(numbers : Double...) -> Double {
if numbers.count == 0 {
return 0.0
}
var total : Double = 0.0
for num in numbers {
total += num
}
return total / Double(numbers.count)
}
var average = getAverage()
print(average) // 结果 : 0.0
average = getAverage(numbers : 1, 2, 3, 4, 5, 6)
print(average) // 结果 : 3.5
4. 函數對象
函數變量本質上是變量, 它的表現類似於函數 :
func sum(number1 : Int, number2 : Int) -> Int {
return number1 + number2
}
let function : (Int, Int) -> Int = sum
let result = function(1, 2)
print(result) // 结果 : 3
let new_function = sum
let new_result = new_function(2,3)
print(new_result) // 结果 : 5
func print_hello_swift() {
print("Hello, Swift!")
}
let print : () -> () = print_hello_swift
print() // 结果 : Hello, Swift!
let new_print = print_hello_swift
new_print() // 结果 : Hello, Swift!
5. 函数作为参数
func get_smaller(number1 : Int, number2 : Int) -> Int {
return (number1 > number2) ? number2 : number1
}
func get_bigger(number1 : Int, number2 : Int) -> Int {
return (number1 > number2) ? number1 : number2
}
func print_result(math_func : (Int, Int) -> Int, number1 : Int, number2 : Int) {
print("The result is \(math_func(number1, number2))")
}
let a : Int = 1
let b : Int = -1
print_result(math_func : get_smaller, number1 : a, number2 : b)
print_result(math_func : get_bigger, number1 : a, number2 : b)
/* 结果 :
The result is -1
The result is 1
*/
6. 函数作为返回值
func get_smaller(number1 : Int, number2 : Int) -> Int {
return (number 1 > number2) ? number2 : number1
}
func get_bigger(number1 : Int,number2 : Int) -> Int {
return (number 1 > number2) ? number1 : number2
}
func choose_function(new_bigger : Bool) -> (Int, Int) -> Int {
return new_bigger ? get_bigger : get_smaller
}
let function = chooseFunction(needBigger : true)
let a = function(1, 2)
print(a) // 结果 : 2
7. 元组作为函数的返回值
当一个函数需要返回多个值的时候, 可以利用元组来返回多个值 :
func get_user_info(user_id : String) -> (username : String, user_level : Int, user_photo : String) {
let username = "John"
let user_level = 1
let user_photo = "https://www.jonny.vip/userPhoto/bf293872f.jpeg"
return (username, useruser_levelLevel, user_photo)
}
let message = get_user_info(user_id : "10000")
print(message.0)
print(message.1)
print(message.2)
/* 结果 :
John
1
https://www.jonny.vip/userPhoto/bf293872f.jpeg
*/
8. 函数的嵌套
被嵌套的子函数只能在其父函数的内部使用, 在父函数的外部是无法被调用的 :
func choose(bigger : Bool, number1 : Int, number2 : Int) {
func get_smaller(number1 : Int, number2 : Int) {
print((number1 < number2) ? number1 : number2)
}
func get_bigger(number1 : Int, number2 : Int) {
print((number1 > number2) ? number1 : number2)
}
bigger ? get_bigger(number1 : number1, number2 : number2) : get_smaller(number1 : number1, number2 : number2)
}
choose(bigger : false, number1 : 1, number2 : 2) // 結果 : 2
9. 函数的递归
理论上所有递归函数都可以被写成循环的方式, 但是递归函数比循环更加简单并且逻辑清晰 :
func recursion(number : Int) -> Int {
if n <= 1 {
return 1
}
else {
return recursion(number : number - 1) + recursion(number : number - 2)
}
}
let num = recursion(number : 5)
print(num) // 结果 : 8
10. Swift 中常用的内置函数
abs
: 絕對值函數;min
: 最小值函數;max
: 最大值函數;filter
: 在數組中查找滿足指定條件的元素 (for i in (1...10).filter({$0 % 3 == 0}) {print(i)}
);map
: 對數組中的每個元素使用指定的方法進行變換;reduce
: 把數組元素組合計算為一個值.
自創文章, 原著 : Jonny. 如若閣下需要轉發, 在已經授權的情況下請註明本文出處 :