У цій статті ви дізнаєтесь про вкладені функції в 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 на консоль.