<p id="qitwt"></p>
      1. <object id="qitwt"><strong id="qitwt"></strong></object>
        <p id="qitwt"></p>
        <li id="qitwt"></li>
        <p id="qitwt"><del id="qitwt"><xmp id="qitwt"></xmp></del></p>
        <p id="qitwt"><label id="qitwt"></label></p>
      2. <acronym id="qitwt"></acronym>
        <p id="qitwt"></p>
        免費開源的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


        青青草国产成人久久_jizzjizz日本护士高清_亚洲 另类 国产 另类_99久久免费精品色老
        <p id="qitwt"></p>
          1. <object id="qitwt"><strong id="qitwt"></strong></object>
            <p id="qitwt"></p>
            <li id="qitwt"></li>
            <p id="qitwt"><del id="qitwt"><xmp id="qitwt"></xmp></del></p>
            <p id="qitwt"><label id="qitwt"></label></p>
          2. <acronym id="qitwt"></acronym>
            <p id="qitwt"></p>