swift基礎_Closure

打開Xcode,用命令行建立一個swift工程,後再建立一個ClosureTest.swift類文件shell

一  ClosureTest.swiftswift

import Foundation


func hasClosureMatch(arr:[Int],value:Int, cb:(num:Int,value:Int)->Bool)->Bool{
    for item in arr{
        //只是調用cb 閉包Closure裏面的函數,無論如何實現
        //相似於OC的Blocks,或者說是C語言中的函數指針(Function Pointer)
        if(cb(num: item,value: value)){
            return true
        }
    }
    return false
}

 

二  main.swift閉包

import Foundation

print("Hello, World!")

var arr = [30,9,40,68,43,98,100]


//(num:Int)->Bool) 閉包Closure參數類型
//func hasClosureMatch(arr:[Int],value:Int, cb:(num:Int,value:Int)->Bool)->Bool{
//    for item in arr{
//        if(cb(num: item,value: value)){
//            return true
//        }
//    }
//    return false
//}

//Closure相似於咱們OC當中的Blocks,可是它要比Blocks簡單不少
//找是否arr裏面有比50大的數字
var v1 = hasClosureMatch(arr,value: 50,cb: {
    (num:Int,value:Int) -> Bool in
    return num > value
})
print("v1 is \(v1)")

//總結:Closure,func closure(num:Int,value:Int) -> Bool

var v2 = hasClosureMatch(arr, value: 50,cb: {
    (num:Int,value:Int)-> Bool in
    return num < value
})
print("v2 is \(v2)")

//閉包是兩個對象之間的通訊

var v3 = hasClosureMatch(arr, value: 10,cb: {
    //沒有寫類型 (num:Int,value:Int)-> Bool in  
    //這裏$0表示 num $1 表示value ,這點兒相似於shell腳本語言
    return $0 < $1
})
print("v3 is \(v3)")


var v4 = hasClosureMatch(arr, value: 100,cb: {
    return $0 > $1
})
print("v4 is \(v4)")

//Closure 相似於 Delegate

 

總結:閉包相似於OC的Blocks,或者說是C語言中的函數指針(Function Pointer),適用於兩個不一樣對象之間的通訊。函數

相關文章
相關標籤/搜索