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