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

相关文章
相关标签/搜索