91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Swift函數閉包

發布時間:2020-07-22 09:02:05 來源:網絡 閱讀:624 作者:hehemmm 欄目:移動開發

一、閉包的概念


    計算機語言要支持閉包的前提條件有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(”李四“)))


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

多伦县| 陕西省| 平湖市| 张家口市| 郓城县| 侯马市| 塔城市| 临安市| 武威市| 布尔津县| 固镇县| 湘乡市| 山丹县| 泾阳县| 哈巴河县| 锡林郭勒盟| 新绛县| 运城市| 梅河口市| 克东县| 永靖县| 阿坝县| 宜春市| 麻城市| 庆元县| 保亭| 咸宁市| 阜新| 宾阳县| 巴林右旗| 阿瓦提县| 永春县| 会宁县| 温宿县| 开封县| 车险| 景德镇市| 德江县| 澳门| 收藏| 文安县|