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








