现在网上好多的都是针对Swift1.0的闭包, 以下我我自己写得Swift2.0的闭包, 有问题欢迎大家指出, 从”第三点”开始
一.知识点
Swift中的闭包有三个种类
全局变量是一个有名字但不会获取任何值的闭包
嵌套函数是一个有名字并且可以捕获其等比函数域内值的闭包
闭包表达式是一个利用轻量级语法所写的可以捕获其上下文中变量或常量值的没有名字的闭包
Swift的闭包表达式拥有比较简洁的风格, 实现场景的优化
利用上下文推断参数和返回值类型
单表达式闭包可以省略return等关键字
参数名称可以简写
Trailing闭包语法(例子:三.代码)
二.代码片段
视频连接
1. 创建一个函数, 一个数组型参数 一个整型参数 一个闭包参数类型(在闭包中传了两个参数) 返回Bool类型
2. 遍历了一下数组, 看是否满足函数的要求, 如果满足则返回真, 不满足返回假
func hasClosureMatch(arr : [Int], value:Int, cb:(num : Int, value:Int) -> Bool) ->Bool {
for item in arr {
// 只是调用cb 闭包closure里面的函数, 但是不管如何实现
if (cb(num:item, value: value)) {
return true;
}
}
return false;
}
创建一个arr的数组
var arr = [20, 9, 100, 34, 89, 39];
执行方法: 用arr中的数值与value中的数值进行比较, 看arr中的数字是否有比value大的
var v1 = hasClosureMatch(arr, value: 40, cb: {
(num:Int, value:Int) -> Bool in
return num >= value
});
print("v1 is \(v1)");
或者使用:
直接使用了
0与
1进行了比较
var v3 = hasClosureMatch(arr, value: 10, cb: {
// 没有写类型(num: Int, value:Int) -> Bool in
// 这里$0是num $1是value
return $0 < $1;
});
print("v3 is \(v3)");
三.嵌套函数
本来是想多写点得, 可是突然不知道如何才可以使得代码变得更简单了….哎
// 直接使用sortInPlace()进行排序
var nums = [1, 9, 2, 8]
func testF(num1:Int, num2:Int) -> Bool {
return num1 > num2
}
nums.sortInPlace()
print("排序后:nums = \(nums)");