В этой статье вы узнаете о вложенных функциях в Swift и о том, как это работает, на примерах.
Если функция существует внутри тела другой функции, она называется вложенной функцией.
Синтаксис вложенной функции
func funcname () (// операторы внешней функции func anotherFuncname () (// операторы внутренней функции))
Здесь функция anotherFuncname
находится внутри тела другой функции funcname
.
Следует отметить, что внутренние функции могут вызываться и использоваться только внутри функции-оболочки (внешней функции).
Пример 1: вложенная функция без возвращаемых значений
func outputMessageByGreeting(_ message: String) ( func addGreetingAndPrint() ( print("Hello! (message)") ) addGreetingAndPrint() ) outputMessageByGreeting("Jack")
Когда вы запустите программу, вывод будет:
Здравствуйте! разъем
В приведенной выше программе вложенная функция addGreetingAndPrint()
вызывается из включающей функции outputMessageByGreeting()
.
Оператор outputMessageByGreeting("Jack")
вызывает внешнюю функцию. И оператор addGreetingAndPrint()
внутри внешней функции вызывает метод, который выводит Hello! Джек в консоли.
Вы не можете вызвать функцию addGreetingAndPrint
вне функции outputMessageByGreeting
.
Пример 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 в консоли.