Swift中對閉包的理解

現在網上好多的都是針對Swift1.0的閉包, 以下我我自己寫得Swift2.0的閉包, 有問題歡迎大家指出, 從”第三點”開始

一.知識點
Swift中的閉包有三個種類
全局變量是一個有名字但不會獲取任何值的閉包
嵌套函數是一個有名字並且可以捕獲其等比函數域內值的閉包
閉包表達式是一個利用輕量級語法所寫的可以捕獲其上下文中變量或常量值的沒有名字的閉包
Swift的閉包表達式擁有比較簡潔的風格, 實現場景的優化
利用上下文推斷參數和返回值類型
單表達式閉包可以省略return等關鍵字
參數名稱可以簡寫
Trailing閉包語法(例子:三.代碼)
二.代碼片段
視頻連接
1. 創建一個函數, 一個數組型參數 一個整型參數 一個閉包參數類型(在閉包中傳了兩個參數) 返回Bool類型
2. 遍歷了一下數組, 看是否滿足函數的要求, 如果滿足則返回真, 不滿足返回假

func hasClosureMatch(arr : [Int], value:Int, cb:(num : Int, value:Int) -> Bool) ->Bool {
    for item in arr {
        // 只是調用cb 閉包closure裏面的函數, 但是不管如何實現
        if (cb(num:item, value: value)) {
            return true;
        }
    }
    return false;
}

創建一個arr的數組

var arr = [20, 9, 100, 34, 89, 39];

執行方法: 用arr中的數值與value中的數值進行比較, 看arr中的數字是否有比value大的

var v1 = hasClosureMatch(arr, value: 40, cb: {
    (num:Int, value:Int) -> Bool in
    return num >= value
    });
print("v1 is \(v1)");

或者使用:
直接使用了0 1進行了比較

var v3 = hasClosureMatch(arr, value: 10, cb: {
    // 沒有寫類型(num: Int, value:Int) -> Bool in
    // 這裏$0是num $1是value
    return $0 < $1;
});
print("v3 is \(v3)");

三.嵌套函數
本來是想多寫點得, 可是突然不知道如何纔可以使得代碼變得更簡單了….哎

// 直接使用sortInPlace()進行排序
var nums = [1, 9, 2, 8]
func testF(num1:Int, num2:Int) -> Bool {
    return num1 > num2
}
nums.sortInPlace()
print("排序後:nums = \(nums)");
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章