2021年4月3日 · developer · 2分钟阅读

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 的数,有以下几种写法

  1. 有名函数作为参数传递

    func lessThanTen(number: Int) -> Bool {
      number < 10  // 单行代码可省略 return,认为返回该行的值
    }
    
    hasAnyMatches(list: numbers, condition: lessThanTen)
  2. 内敛匿名函数作为参数

    使用 {} 包裹匿名函数,并使用 in 分隔返回类型和函数题:

    hasAnyMatches(list: numbers, condition: {(number: Int) -> Bool in
        number < 10
    })
  3. 内联写法的省略形式

    当函数作为最后一个参数时,可以将匿名函数拿到调用函数的小括号外:

    hasAnyMatches(list: numbers) {(number: Int) -> Bool in
        number < 10
    }
  4. 内敛写法的进一步省略

    Swift 虽为强类型语言,单当类型可以被推断时,则可省略关于类型的声明:

    hasAnyMatches(list: numbers) {number in
        return number < 10
    }

参考

A Swift Tour

评论

登录 — 登录后参与讨论。