W tym artykule dowiesz się o zagnieżdżonych funkcjach w Swift oraz o tym, jak to działa, na przykładach.
Jeśli funkcja istnieje w treści innej funkcji, nazywa się to funkcją zagnieżdżoną.
Składnia funkcji zagnieżdżonej
func funcname () (// instrukcje funkcji zewnętrznej func anotherFuncname () (// instrukcje funkcji wewnętrznej))
Tutaj funkcja anotherFuncnameznajduje się w treści innej funkcji funcname.
Należy zauważyć, że funkcje wewnętrzne mogą być wywoływane i używane tylko wewnątrz funkcji obejmującej (funkcja zewnętrzna).
Przykład 1: Zagnieżdżona funkcja bez zwracanych wartości
func outputMessageByGreeting(_ message: String) ( func addGreetingAndPrint() ( print("Hello! (message)") ) addGreetingAndPrint() ) outputMessageByGreeting("Jack")
Po uruchomieniu programu wynik będzie następujący:
Witaj! Jacek
W powyższym programie funkcja zagnieżdżona addGreetingAndPrint()jest wywoływana z funkcji otaczającej outputMessageByGreeting().
Instrukcja outputMessageByGreeting("Jack")wywołuje funkcję zewnętrzną. A instrukcja addGreetingAndPrint()wewnątrz funkcji zewnętrznej wywołuje metodę, która generuje Hello! Jack w konsoli.
Nie możesz wywołać funkcji addGreetingAndPrintpoza funkcją outputMessageByGreeting.
Przykład 2: Zagnieżdżona funkcja z parametrami i zwracanymi wartościami
Funkcje zagnieżdżone mogą zawierać funkcje z parametrami i zwracanymi wartościami.
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)
Po uruchomieniu programu wynik będzie następujący:
5
W powyższym programie
- funkcja zewnętrzna to
operate(), zwracana wartość typu Funkcja(Int,Int) -> Int. - a funkcje wewnętrzne (zagnieżdżone) to
add()isubtract().
Zagnieżdżona funkcja add()iw subtract()pewnym sensie jest używana poza funkcją otaczającą operate(). Jest to możliwe, ponieważ funkcja zewnętrzna zwraca jedną z tych funkcji.
Użyliśmy funkcji wewnętrznej poza funkcją otaczającą operate()jako operation(2, 3). Program wywołuje wewnętrznie, add(2, 3)co daje 5 w konsoli.








