iOS開發Swift篇—(七)函數
一、函數的定義
(1)函數的定義格式
1 func 函數名(形參列表) -> 返回值類型 { 2 // 函數體... 3 4 }
(2)形參列表的格式
形參名1: 形參類型1, 形參名2: 形參類型2, …
(3)舉例:計算2個整數的和
1 func sum(num1: Int, num2: Int) -> Int { 2 return num1 + num2 3 }
(4)沒有返回值的函數
如果函數沒有返回值,有3種寫法
1 func 函數名(形參列表) -> Void { 2 // 函數體... 3 } 4 5 func 函數名(形參列表) -> () { 6 // 函數體... 7 } 8 9 func 函數名(形參列表) { 10 // 函數體... 11 }
(5)沒有形參的函數
一個函數如果沒有形參,函數名后面的小括號也不能省略
1 func 函數名() -> Int { 2 // 函數體... 3 }
上面的函數沒有形參、返回值是Int類型
(6)返回元組的函數
一個函數也可以返回元組數據
1 func find(id: Int) -> (name: String, age: Int) { 2 if id > 0 { 3 return ("jack", 20) 4 } else { 5 return ("nobody", 0) 6 } 7 } 8 var people = find(2) 9 println("name=\(people.name), age=\(people.age)")
二、外部參數名
1.簡單說明
一般情況下,通過形式參數的名字,就能推斷出這個參數的含義和作用
1 func addStudent(name: String, age: Int, no: Int) { 2 println("添加學生:name=\(name),age=\(age),no=\(no)") 3 }
在函數內部一看參數名就知道這3個參數的作用
但是,形式參數是用在函數內部的,當調用函數時就看不見形參的名字,有可能導致以后會不太明白每個參數的含義
對於addStudent("jack", 20, 19)一眼望去,能猜出第1個參數"jack"是指姓名,后面的20、19分別代表什么含義?
為了解決上述問題,Swift提供了外部參數名語法
外部參數名可以在調用函數時提醒每個參數的含義
2.定義
外部參數名的定義格式如下:
1 func 函數名(外部參數名 形式參數名: 形式參數類型) -> 返回值類型 { 2 // 函數體... 3 }
外部參數名寫在形式參數名的前面,與形式參數名之間用空格隔開
3.外部參數名的使用
1 func sum(number1 num1: Int, number2 num2: Int) -> Int 2 { 3 return num1 + num2 4 } 5 sum(number1: 10, number2: 20) // 調用函數
注意:一旦定義了外部參數名,在調用函數時就必須加上外部參數名
4.外部參數名的簡寫
使用#能簡化外部參數名的定義
1 func sum(#num1 : Int, #num2 : Int) 2 { 3 return num1 + num2 4 }
第1行代碼的意思:num1、num2既是形式參數名,又是外部參數名
// 調用函數 sum(num1: 10, num2: 20)
三、默認參數值
(1)可以在定義函數時,給形參指定一個默認值,調用函數時,就可以不用給這個形參傳值
1 func addStudent(name: String, age: Int = 20) { 2 println("添加1個學生:name=\(name),age=\(age)") 3 }
addStudent("jack")
age參數有個默認值20,所以第4行調用函數時可以不傳值給age參數
輸出結果是:
添加1個學生:name=jack,age=20
(2)帶有默認參數值的形參,Swift會自動給它生成一個跟形參名相同的外部參數名
age: Int = 20相當於#age: Int = 20
因此,如果要傳入age參數值時,只能這么調用
addStudent("jack", age: 25)
(3)在帶有默認參數值的參數名前加個下划線 _ ,調用函數時就不用寫外部參數名
1 func addStudent(name: String, _ age: Int = 20) { 2 println("添加1個學生:name=\(name),age=\(age)") 3 } 4 5 addStudent("jack", 25)
四、常量和變量參數
默認情況下,函數的參數都是常量參數,不能在函數內部修改
1 func test(num: Int) { 2 num = 10 3 } 4 5 func test(num: Int)參數相當於func test(let num: Int)
注意:第2行代碼會報錯
在有些情況下,可能需要在函數內部修改參數的值,這時需要定義變量參數
在參數名前面加個var即可
1 func test(var num : Int) { 2 num = 10 3 }
// 編寫函數在某個字符串的尾部拼接N個其他字符串
1 func append(var string: String, suffix: String, count: Int) -> String 2 { 3 for _ in 0..<count { 4 string += suffix 5 } 6 return string 7 } 8 append("jack", ".", 4) // 調用函數 9 // jack....
五、輸入輸出參數
1.什么是輸入輸出參數?
在C語言中,利用指針可以在函數內部修改外部變量的值
在Swift中,利用輸入輸出參數,也可以在函數內部修改外部變量的值
輸入輸出參數,顧名思義,能輸入一個值進來,也可以輸出一個值到外部
2.輸入輸出參數的定義
在參數名前面加個inout關鍵字即可
func swap(inout num1: Int, inout num2: Int) {
}
3.代碼示例:寫一個函數交換外部2個變量的值
1 func swap(inout num1: Int, inout num2: Int) { 2 let tempNum1 = num1 3 num1 = num2 4 num2 = tempNum1 5 } 6 var a = 20 7 var b = 10 8 swap(&a, &b) // 傳入的參數前面必須加上& 9 // 執行完swap函數后,a的值是10,b的值是20
4.輸入輸出參數的使用注意
傳遞實參時,必須在實參的前面加上&
不能傳入常量或者字面量(比如10)作為參數值(因為它們都不可改)
輸入輸出參數不能有默認值
輸入輸出參數不能是可變參數
輸入輸出參數不能再使用let、var修飾(inout和let、var不能共存)
輸入輸出參數的價值之一
可以實現函數的多返回值(其實讓函數返回元組類型,也能實現返回多個值)