• <small id="w8oog"></small>
  • <td id="w8oog"></td>
  • <small id="w8oog"></small><xmp id="w8oog"><td id="w8oog"></td><td id="w8oog"><li id="w8oog"></li></td><xmp id="w8oog"><td id="w8oog"></td>
  • <td id="w8oog"></td><td id="w8oog"><li id="w8oog"></li></td><small id="w8oog"></small>
  • <td id="w8oog"></td>
  • <small id="w8oog"></small>
  • <small id="w8oog"></small><td id="w8oog"></td>
    免費開源的iOS開發學習平臺

    Swift: 7.2 函數類型和嵌套函數

    函數類型

    • 在Swift中,每個函數都是一種特定的函數類型,函數類型由函數的參數類型和返回類型組成。使用函數類型就像使用其他類型一樣,例如,可以定義一個類型為函數的常量或變量,并且把函數值賦給它。
    func addTwo( a : Int, b: Int)-> Int{
        return a+b
    }
    var sumTwo: (Int, Int)-> Int = addTwo
    //也可以簡寫 var sumTwo = addTwo
    sumTwo(1,3)
    
    • 函數類型也可以作為另一個函數的參數進行傳遞。
    func printAddTwo(addTwo: (Int,Int)->Int,a: Int, b: Int){
        print("\(addTwo(a,b))")
        //打印結果:3
    }
    printAddTwo(addTwo: addTwo, a: 1, b: 2)
    
    • 同樣的,函數類型可以作為另一個函數的返回值進行返回。
    func returnAddFunc()->((Int,Int)->Int){
        return addTwo
    }
    let addFunc = returnAddFunc()
    addFunc(1,2) //打印結果:3
    

    嵌套函數

    在本章前面的內容中,我們所見到的所有函數都叫全局函數(global function),它們都被定義在全局域中。在Swift語言中,也可以把函數定義在別的函數體中,這稱作嵌套函數(nested function)。在默認情況下,嵌套函數是對外界不可見的,但是可以被它們的封閉函數(enclosing function)來調用。

    func returnMinusFunc()->((Int, Int)->Int){
        func minusFunc(a: Int, b: Int)->Int{
            return a-b
        }
    return minusFunc
    }
    let minusTwoInt = returnMinusFunc()
    print(minusTwoInt(5,1)) //打?。?
    

    示例代碼

    下面代碼演示函數類型和嵌套函數結合使用的方法。嵌套函數可以使用它所在的主函數中所有的變量的值的拷貝,也就是說,在嵌套函數中改變主函數的變量,不會影響主函數中該變量的值。

    func avanceFunc(multi: Int, choose: Int)->((Int,Int)->Int){
        var base = 2
        func addFunc(a: Int, b: Int)->Int{
            print("addFunc 函數中 base 變量:\(base)")
            base = a + b //base只是主函數base變量的一個值拷貝
            
            return base * multi
        }
        func minusFunc(a: Int, b: Int)->Int{
            //base只是主函數base變量的一個值拷貝
            print("minusFunc 函數中 base 變量:\(base)")
            base = a - b
            return base * multi
        }
        //base 變量的值不會因為嵌套函數而改變
        print("advanceFunc 函數中 base 變量:\(base)")
        return choose == 1 ? addFunc : minusFunc;
    }
    let add = avanceFunc(multi: 2, choose: 1)
    
    print(add(2,1))
    
    print()
    let minus1 = avanceFunc(multi: 2, choose: 2)
    
    print(minus1(2,1))
    
    

    運行結果如下圖。

    示例代碼

    https://github.com/99ios/23.8


    ijzzijzzij亚洲大全|天天狠天天透天干天天|日本一本加勒比五月天伊人久久|久久久噜噜噜久久中文字幕色伊伊
  • <small id="w8oog"></small>
  • <td id="w8oog"></td>
  • <small id="w8oog"></small><xmp id="w8oog"><td id="w8oog"></td><td id="w8oog"><li id="w8oog"></li></td><xmp id="w8oog"><td id="w8oog"></td>
  • <td id="w8oog"></td><td id="w8oog"><li id="w8oog"></li></td><small id="w8oog"></small>
  • <td id="w8oog"></td>
  • <small id="w8oog"></small>
  • <small id="w8oog"></small><td id="w8oog"></td>