首页 > 编程语言 > 详细

swift基础_Closure

时间:2016-01-24 16:50:53      阅读:276      评论:0      收藏:0      [点我收藏+]

打开Xcode,用命令行创建一个swift工程,后再创建一个ClosureTest.swift类文件

一  ClosureTest.swift

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),适用于两个不同对象之间的通信。

 

swift基础_Closure

原文:http://www.cnblogs.com/xuanzhangran123/p/5155227.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!