一、函數的重載
規則 : a、函數名相同 b、參數個數不同、參數類型不同 參數標籤不同
//原函數
func sum(a: Int , b: Int) -> Int{ a + b }
// 參數個數不同
func sum(a: Int ,b: Int ,c: Int) -> Int{ a + b + c }
//參數類型不同
func sum(a: Int ,b: Double) -> Double { Double(a) + b }
// 忽略標籤
func sum(_ a: Int ,_ b: Int) -> Int{ a + b }
//參數標籤不同
func sum (v1: Int ,v2: Int) -> Int{ v1 + v2 }
調用
注意點:
a、返回值類型與函數重載無關
b、默認參數值和函數重載一起使用產生二義性時,編譯器並不會報錯 (在C++中會報錯)
func sum(a: Int ,b: Int) -> Int { a + b}
func sum(a: Int ,b: Int , c: Int = 10 ) -> Int { a + b + c }
//會調用的是: sum(a: Int ,b: Int) -> Int
sum(a: 10, b: 20) // 30
c、可變參數、省略參數標籤、函數重載一起使用產生二義性時,編譯器有可能會報錯
二、函數類型
1、每一個函數都是有類型的,函數類型由形式參數類型 、返回值類型組成
func test(){} //() -> void 或 () -> ()
func sum(a: Int ,b: Int) -> Int {a + b } // (Int , Int) -> Int
//定義變量
var fn: (Int ,Int) -> Int = sum(a:b:)
print(fn(20,25)) // 45
2、函數類型作爲函數參數
func sum (a: Int ,b: Int) -> Int{ a + b}
func differece(a: Int ,b: Int) -> Int { a - b}
func printResult(_ mathFn:(Int ,Int) -> Int ,_ a: Int ,_ b: Int){
print(mathFn(a,b))
}
printResult(sum(a:b:), 30, 40) // 70
printResult(differece(a:b:), 60, 50) // 10
3、函數類型作爲返回值 (返回值是函數類型的函數,叫做高階函數)
func next(_ input: Int) -> Int { input + 1}
func previous(_ input: Int) -> Int {input - 1}
func forward(_ forward : Bool) -> (Int) -> Int{
forward ? next(_:) : previous(_:)
}
print(forward(false)(3)) // 2
print(forward(true)(3)) // 4
4、嵌套函數 (將函數定義在函數內部)
func forward(_ forward: Bool) -> (Int) -> Int {
func next(_ input: Int) -> Int { input + 1 }
func previous(_ input: Int) -> Int { input - 1 }
return forward ? next(_:) : previous(_:)
}
print(forward(false)(3)) // 2
print(forward(true)(3)) // 4