Swift函數閉包

來源:互聯網
上載者:User

標籤:swift函數閉包

一、閉包的概念


    電腦語言要支援閉包的前提條件有2個:

    1、支援函數類型,能夠將函數作為參數或傳回值傳遞;

    2、支援函數嵌套


    樣本:


    func caculate(opr : String)->(Int,Int)->Int {

                var result:(Int,Int)->Int

                switch(opr){

            case "+":

                result={(a:Int,b:Int)->Int in 

            return a+b

}

            default:

                result = {(a:Int,b:Int) -> Int in

                    return a - b

}


}

    return result;

}


let f1:(Int,Int)->Int = caculate("+")


println(f1(2,5))


    通過以上樣本,我們可以給Swift的閉包一個定義:閉包是自包含的匿名函數塊,可以作為運算式,函數參數和函數傳回值,閉包運算式的運算結果是一種函數類型


    Swift的閉包類似於C和Obeject-C的程式碼程式庫,C++和C#的Lamba運算式,JAVE中的內部匿名類



二、閉包的運算式


    Swift中的閉包運算式的標準寫法如下:


    {(參數列表)->傳回值類型 in 語句組}


    1、類型推斷簡化

        Swift中可以根據上下文環境推斷出參數類型和參數傳回值,以下代碼是標準形式的閉包:


        {(a : Int, b : Int)-> Int in 

            return a + b

}

        Swift能推斷出參數a和b為Int類型,傳回值為Int類型,簡化形式如下:


    {a,b in return a + b}        



    2、隱藏return關鍵字

        如果在閉包的內部語句組只有一條語句,如 rerturn a + b,那麼這種語句都是返回語句,前面的關鍵字rerturn可以省略,省略形式如下:


    {a,b in a + b}



    3、縮寫參數名稱

        

        Swift提供了參數名稱縮寫的功能,我們可以用$0,$1,$2,表示調用閉包中的函數,$0表示第一個參數,$1表示第二個參數,以此類推


    func caculate(opr : String)->(Int,Int)->Int {

            var result:(Int,Int)->Int

            swtich opr{

            case "+":

            result={$1,$2}

            default:

            result={$1-$2}

}

            return result

}

        


    4、使用閉包傳回值


            閉包運算式本質上是函數類型,是有傳回值的,可以在運算式中直接使用閉包的傳回值

        

            let c1 :Int = {(a:Int,b:Int)->Int in return a+b}(10,5)

            println(c1)


三、使用尾隨閉包


        閉包運算式可以作為函數的參數傳遞,閉包必須是最後一個參數的時候才能使用


        樣本:

        func caculate(opr : String,funcN:(Int,Int)->Int){                switch opr{                case "+":                println(funcN(10,5))                default:                println(funcN(10,5))}}        caculate("+"){(a:Int,b:Int)->Int in return a + b}         caculate("-"){(a:Int,b:Int)->Int in return a - b}



四、捕獲上下文中的常量和變數


        嵌套函數或閉包可以訪問它所在內容相關的變數和常量,這個過程稱之為捕獲值,即便是定義這些變數和常量的原始域已經不存在,嵌套函數或閉包仍然可以在函數體內或閉包體內引用和修改這些值。


        樣本:

        funMakeArray()->String-[String]{                var ary:[String] = [String]()            funcAddElement(element:String)->[String]{                ary.append(element)                return ary}            return addElement}    let f1 = funMakeArray()    println(f1("張三"))    println(f1(”李四“)))


本文出自 “平凡之路” 部落格,請務必保留此出處http://linjohn.blog.51cto.com/1026193/1620594

Swift函數閉包

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.