English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Swift Основы教程

Операторы Swift

Swift Управление потоком

Swift Коллекции

Swift Функции

Swift Уровень продвинутый

Вложенные функции в Swift

В этой статье вы узнаете о внутренних функциях в Swift и о том, как их использовать с примерами.

Если у однойФункцияЕсли функция существует в теле другой функции, то она называется внутренней функцией.

Синтаксис внутренних функций

func funcname() {
    // Строка внешней функции
    func anotherFuncname() {
        // Строка внутреннего функции
    

Здесь функция anotherFuncname расположена в теле другой функции funcname.

Следует отметить, что внутренние функции могут вызываться и использоваться только в пределах封闭ой функции (внешней функции).

Пример 1: Внутренние функции без значения возвращения

func outputMessageByGreeting(_ message: String) {
    
    func addGreetingAndPrint() {
        print("Hello! \(message)")
    
    addGreetingAndPrint()

outputMessageByGreeting("Jack")

При выполнении этой программы вывод будет:

Hello! Jack

В приведенном выше примере функция addGreetingAndPrint() вызывается из функции outputMessageByGreeting().

Указание outputMessageByGreeting("Jack") вызывает внешнюю функцию. Внутренние инструкции функции addGreetingAndPrint() вызывают вывод Hello Jack!

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