iOS開發Swift篇—(八)函數(2)

一、函數類型

函數類型也是數據類型的一種,它由形參類型和返回值類型組成,格式是

(形參類型列表) -> 返回值類型

1 func sum(num1: Int, num2: Int) -> Int {
2     return num1 + num2
3 }

sum函數的函數類型是(Int, Int) -> Int

1 func printLine()
2 {
3     println("-----------")
4 }

printLine函數的函數類型有4種表示方法

(1)Void -> Void 

(2)() -> ()

(3)Void -> ()

(4)() -> Void

 

二、利用函數類型定義變量

可以利用函數類型來定義變量,將來可以存儲這種類型的函數

1 func sum(num1: Int, num2: Int) -> Int {
2     return num1 + num2
3 }
4 var fn: (Int, Int) -> Int = sum
5 fn(10, 20) // 返回30

由於Swift有類型推斷機制,因此,也可以這麼寫

  var fn = sum   // fn以後所存儲函數的類型就必須是(Int, Int) -> Int

 

三、函數作爲參數

跟其他數據類型一樣,函數也能當函數的參數

1 func printResult(fn: (Int, Int) -> Int, num1: Int, num2: Int) 
2 {
3     println("運算結果是:%d", fn(num1, num2))
4 }

fn參數接收一個函數,這個函數必須返回Int、有2個Int類型的參數

複製代碼
1 func sum(num1: Int, num2: Int) -> Int {
2     return num1 + num2
3 }
4 func minus(num1: Int, num2: Int) -> Int {
5     return num1 - num2
6 }
7 printResult(sum, 20, 10) // 30
8 printResult(minus, 20, 10) // 10
複製代碼

 

四、函數作爲返回值

跟其他數據類型一樣,函數也能當函數的返回值

複製代碼
 1 func goToWork() { println("去上班") }
 2 func playFootball() { println("踢足球") }
 3 func howToDo(day: Int) -> () -> () {
 4     if day < 6 {
 5         return goToWork
 6     } else {
 7         return playFootball
 8     }
 9 }
10 var fn = howToDo(7)
11 fn() 
12 // 踢足球
複製代碼

 

五、函數重載

函數重載:函數名相同,函數類型不同

下面的2個函數構成重載

(1)函數名:sum,函數類型:(Int, Int) -> Int

1 func sum(num1: Int, num2: Int) -> Int {
2     return num1 + num2
3 }

(2)函數名:sum,函數類型:(Int, Int, Int) -> Int

1 func sum(num1: Int, num2: Int, num3: Int) -> Int {
2     return num1 + num2 + num3
3 }

 

六、嵌套函數

全局函數:在全局作用域中定義的函數

嵌套函數:在某個函數體中定義的函數

代碼示例:

複製代碼
 1 func howToDo(day: Int) -> () -> () {
 2     func goToWork() { println("去上班") }
 3     func playFootball() { println("踢足球") }
 4     if day < 6 {
 5         return goToWork
 6     } else { return playFootball }
 7 }
 8 var fn = howToDo(5)
 9 fn() // 去上班
10 goToWork() 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章