如果一个函数存在于另一个函数的主体内,则称为嵌套函数。
嵌套函数的语法
func funcname() {
//外部函数语句
func anotherFuncname() {
//内部函数语句
}
}
在此,函数 anotherFuncname 位于另一个函数 funcname 的主体内部。
应当注意,内部函数只能在封闭函数(外部函数)内部调用和使用。
示例1:没有返回值的嵌套函数
func outputMessageByGreeting(_ message: String) {
func addGreetingAndPrint() {
print("Hello! \(message)")
}
addGreetingAndPrint()
}
outputMessageByGreeting("Jack")
运行该程序时,输出为:
Hello! Jack
在上面的程序中,从封闭函数 outputMessageByGreeting ()调用了嵌套函数 addGreetingAndPrint ()。
语句 outputMessageByGreeting("Jack") 调用外部函数。 外部函数内的语句 addGreetingAndPrint()调用输出 Hello Jack!
您不能在函数 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。