本文主要介绍 Swift 中函数作为参数传递的几种写法.
Swift 作为一种强类型语言,其语法却有非常灵活的写法. 类似于 JavaScrip 等现代语言,Swift 也具备闭包(closure)的机制,并且函数作为一种数据类型,可以很方便的作为参数传递给目标函数.
下面举一个例子对于这种情况的几种写法做一下记录.
函数 hasAnyMatches
接受两个参数,第一个接受一个整型数组,第二个接受一个函数,检查数组中的元素,若有任意一个元素通过参数
2 函数的检查,则返回 true
,否则返回 false
.
1 |
|
我们写一个函数用以检查数组中是否有小于 10 的数,有以下几种写法
有名函数作为参数传递
1
2
3
4
5func lessThanTen(number: Int) -> Bool {
number < 10 // 单行代码可省略 return,认为返回该行的值
}
hasAnyMatches(list: numbers, condition: lessThanTen)内敛匿名函数作为参数
使用
{}
包裹匿名函数,并使用in
分隔返回类型和函数题:1
2
3hasAnyMatches(list: numbers, condition: {(number: Int) -> Bool in
number < 10
})内联写法的省略形式
当函数作为最后一个参数时,可以将匿名函数拿到调用函数的小括号外:
1
2
3hasAnyMatches(list: numbers) {(number: Int) -> Bool in
number < 10
}内敛写法的进一步省略
Swift 虽为强类型语言,单当类型可以被推断时,则可省略关于类型的声明:
1
2
3hasAnyMatches(list: numbers) {number in
return number < 10
}
参考