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 anotherFuncname
znajduje 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 addGreetingAndPrint
poza 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.