一、函數類型
函數類型也是數據類型的一種,它由形參類型和返回值類型組成,格式是
(形參類型列表) -> 返回值類型
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()