iOS開發Swift篇—(七)函數(1)


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=jackage=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不能共存)

 

輸入輸出參數的價值之一

  可以實現函數的多返回值(其實讓函數返回元組類型,也能實現返回多個值)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM