打开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),适用于两个不一样对象之间的通讯。函数