Funkcje zagnieżdżone w języku Swift (z przykładami)

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()i subtract().

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.

Interesujące artykuły...