V tem članku boste izvedeli več o ugnezdenih funkcijah v Swiftu in kako deluje s primeri.
Če funkcija obstaja znotraj telesa druge funkcije, se imenuje ugnezdena funkcija.
Sintaksa ugnezdene funkcije
func funcname () (// stavki zunanje funkcije func anotherFuncname () (// stavki notranje funkcije))
Tu je funkcija anotherFuncname
znotraj telesa druge funkcije funcname
.
Upoštevati je treba, da je notranje funkcije mogoče poklicati in uporabljati samo znotraj ograjevalne funkcije (zunanja funkcija).
Primer 1: ugnezdena funkcija brez vrnjenih vrednosti
func outputMessageByGreeting(_ message: String) ( func addGreetingAndPrint() ( print("Hello! (message)") ) addGreetingAndPrint() ) outputMessageByGreeting("Jack")
Ko zaženete program, bo rezultat:
Zdravo! Jack
V zgornjem programu se ugnezdena funkcija addGreetingAndPrint()
prikliče iz ograjevalne funkcije outputMessageByGreeting()
.
Stavek outputMessageByGreeting("Jack")
pokliče zunanjo funkcijo. In stavek addGreetingAndPrint()
znotraj zunanje funkcije pokliče metodo, ki izpiše Hello! Jack v konzoli.
Funkcije ne morete poklicati addGreetingAndPrint
zunaj funkcije outputMessageByGreeting
.
2. primer: ugnezdena funkcija s parametri in vrnjenimi vrednostmi
Vgnezdene funkcije lahko vsebujejo funkcije s parametri in vrnjenimi vrednostmi.
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)
Ko zaženete program, bo rezultat:
5.
V zgornjem programu
- zunanja funkcija je
operate()
z vrnjeno vrednostjo tipa Function(Int,Int) -> Int
. - notranje (ugnezdene) funkcije pa so
add()
insubtract()
.
Vgnezdena funkcija add()
in subtract()
na nek način se uporabljata zunaj zaprte funkcije operate()
. To je mogoče, ker zunanja funkcija vrne eno od teh funkcij.
Notranjo funkcijo smo uporabili zunaj ograjevalne funkcije operate()
kot operation(2, 3)
. Program interno pokliče, add(2, 3)
ki v konzoli odda 5.