Swift ——函數下部分(函數重載、函數類型 )

上部分鏈接

一、函數的重載

規則 : 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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章