原文: https://www.programiz.com/swift-programming/nested-functions

在本文中,您将了解 Swift 中的嵌套函数及其如何与示例一起使用。

如果函数存在于另一个函数的主体内,则称为嵌套函数。

嵌套函数的语法

  1. func funcname() {
  2. //statements of outer function
  3. func anotherFuncname() {
  4. //statements of inner function
  5. }
  6. }

在此,函数anotherFuncname在另一个函数funcname的主体内部。

应当注意,内部函数只能在封闭函数(外部函数)内部调用和使用。


示例 1:没有返回值的嵌套函数

  1. func outputMessageByGreeting(_ message: String) {
  2. func addGreetingAndPrint() {
  3. print("Hello! \(message)")
  4. }
  5. addGreetingAndPrint()
  6. }
  7. outputMessageByGreeting("Jack")

运行该程序时,输出为:

  1. Hello! Jack

在上述程序中,正在从封闭函数outputMessageByGreeting()调用嵌套函数addGreetingAndPrint()

语句outputMessageByGreeting("Jack")调用外部函数。 并且外部函数内部的语句addGreetingAndPrint()调用输出Hello! Jack

您不能在函数outputMessageByGreeting之外调用函数addGreetingAndPrint


示例 2:具有参数和返回值的嵌套函数

嵌套函数可以包含带有参数和返回值的函数。

  1. func operate(with symbol:String) -> (Int, Int) -> Int {
  2. func add(num1:Int, num2:Int) -> Int {
  3. return num1 + num2
  4. }
  5. func subtract(num1:Int, num2:Int) -> Int {
  6. return num1 - num2
  7. }
  8. let operation = (symbol == "+") ? add : subtract
  9. return operation
  10. }
  11. let operation = operate(with: "+")
  12. let result = operation(2, 3)
  13. print(result)

运行该程序时,输出为:

  1. 5

在上面的程序中

  • 外部函数为operate(),返回值类型为Function(Int,Int) -> Int
  • 内部(嵌套)函数为add()subtract()

嵌套函数add()subtract()在封装函数operate()之外正在使用。 这是可能的,因为外部函数返回这些函数之一。

我们将封闭函数operate()之外的内部函数用作operation(2, 3)。 程序内部调用add(2, 3),在控制台中输出 5。