U ovom ćete članku naučiti o ugniježđenim funkcijama u Swiftu i kako to funkcionira s primjerima.
Ako funkcija postoji unutar tijela druge funkcije, naziva se ugniježđena funkcija.
Sintaksa ugniježđene funkcije
func funcname () (// izjave vanjske funkcije func anotherFuncname () (// izjave unutarnje funkcije))
Ovdje je funkcija anotherFuncname
unutar tijela druge funkcije funcname
.
Treba napomenuti da se unutarnje funkcije mogu pozivati i koristiti samo unutar funkcije ograđivanja (vanjska funkcija).
Primjer 1: Ugnježđena funkcija bez povratnih vrijednosti
func outputMessageByGreeting(_ message: String) ( func addGreetingAndPrint() ( print("Hello! (message)") ) addGreetingAndPrint() ) outputMessageByGreeting("Jack")
Kada pokrenete program, izlaz će biti:
Zdravo! Utičnica
U gornjem programu, ugniježđena funkcija addGreetingAndPrint()
poziva se iz funkcije koja obuhvaća outputMessageByGreeting()
.
Izjava outputMessageByGreeting("Jack")
poziva vanjsku funkciju. A izjava addGreetingAndPrint()
unutar vanjske funkcije poziva metodu koja daje Hello! Jack u konzoli.
Ne možete pozvati funkciju addGreetingAndPrint
izvan funkcije outputMessageByGreeting
.
Primjer 2: Ugniježđena funkcija s parametrima i povratnim vrijednostima
Ugniježđene funkcije mogu sadržavati funkcije s parametrima i povratnim vrijednostima.
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)
Kada pokrenete program, izlaz će biti:
5
U gornjem programu,
- vanjska je funkcija
operate()
s povratnom vrijednošću tipa Function(Int,Int) -> Int
. - a unutarnje (ugniježđene) funkcije su
add()
isubtract()
.
Ugniježđena funkcija add()
i subtract()
na neki se način koriste izvan funkcije ograđivanja operate()
. To je moguće jer vanjska funkcija vraća jednu od tih funkcija.
Koristili smo unutarnju funkciju izvan funkcije zatvaranja operate()
kao operation(2, 3)
. Program interno poziva add(2, 3)
koji na konzoli izbacuje 5.