打開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),適用於兩個不一樣對象之間的通訊。函數