# Swift 嵌套函数

> 原文： [https://www.programiz.com/swift-programming/nested-functions](https://www.programiz.com/swift-programming/nested-functions)

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

如果[函数](/swift-programming/functions "Swift functions")存在于另一个函数的主体内，则称为嵌套函数。

## 嵌套函数的语法

```swift
func funcname() {
    //statements of outer function
    func anotherFuncname() {
        //statements of inner function
    }
}

```

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

应当注意，内部函数只能在封闭函数（外部函数）内部调用和使用。

* * *

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

```swift
func outputMessageByGreeting(_ message: String) {

    func addGreetingAndPrint() {
        print("Hello! \(message)")
    }
    addGreetingAndPrint()
}
outputMessageByGreeting("Jack") 
```

运行该程序时，输出为：

```swift
Hello! Jack
```

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

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

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

* * *

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

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

```swift
func operate(with symbol:String) -> (Int, Int) -> Int {

    func add(num1:Int, num2:Int) -> Int {
        return num1 + num2
    }

    func subtract(num1:Int, num2:Int) -> Int {
        return num1 - num2
    }
    let operation = (symbol == "+") ?  add : subtract
    return operation
}

let operation = operate(with: "+")
let result = operation(2, 3)
print(result) 
```

运行该程序时，输出为：

```swift
5
```

在上面的程序中

*   外部函数为`operate()`，返回值类型为`Function(Int,Int) -> Int`。
*   内部（嵌套）函数为`add()`和`subtract()`。

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

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