Вложенные функции в Swift (с примерами)

В этой статье вы узнаете о вложенных функциях в 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 в консоли.

Интересные статьи...