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

Swift 嵌套関数

この記事では、Swiftのネストされた関数とその使用例について学びます。

もし一つの関数他の関数の主体内に存在する場合、ネストされた関数と呼ばれます。

ネストされた関数の構文

func funcname() {
    //外部関数の文
    func anotherFuncname() {
        //内部関数の文
    }
}

ここでは、anotherFuncname関数がfuncname関数の主体内部に位置しています。

内部関数は、閉じた関数(外部関数)の内部でしか呼び出したり使用したりできませんので、注意してください。

例1:戻り値を持たないネストされた関数

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

运行该程序时,输出为:

Hello! Jack

上記のプログラムでは、outputMessageByGreeting()を閉じた関数からネストされた関数addGreetingAndPrint()が呼び出されました。

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)をプログラム内で呼び出します2,3)をコントロールタブに表示5。