如果一个函数存在于另一个函数的主体内,则称为嵌套函数。
嵌套函数的语法
func funcname() {
//statements of outer function
func anotherFuncname() {
//statements of inner function
}
}
在这里, 函数 anotherFuncname
在另一个函数 funcname
。
应该注意的是,内部函数只能在封闭函数 (外部函数)内部调用和使用。
示例1:没有返回值的嵌套函数
func outputMessageByGreeting(_ message: String) {
func addGreetingAndPrint() {
print("Hello! \(message)")
}
addGreetingAndPrint()
}
outputMessageByGreeting("Jack")
运行该程序时,输出为:
Hello! Jack
在上述程序中,嵌套函数 addGreetingAndPrint()
是从封闭函数 outputMessageByGreeting()
调用的。
语句outputMessageByGreeting("Jack")
调用外部函数。外部函数的语句addGreetingAndPrint()
调用输出Hello的方法!控制台中的杰克 。
您不能在outputMessageByGreeting
函数之外调用addGreetingAndPrint
函数 。
示例2:带有参数和返回值的嵌套函数
嵌套函数可以包含带有参数和返回值的函数。
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)
运行该程序时,输出为:
5
在上面的程序中,
- 外部函数是
operate()
,其返回值类型为Function(Int,Int) -> Int
。 - 内部(嵌套)函数是
add()
和subtract()
。
嵌套函数 add()
和subtract()
在封闭函数 operate()
之外正在使用。这是可能的,因为外部函数返回这些函数之一。
我们已将封闭函数 operate()
之外的内部函数用作operation(2, 3)
。程序内部调用add(2, 3)
,在控制台中输出5。