Tässä artikkelissa opit Swiftin sisäkkäisistä toiminnoista ja kuinka se toimii esimerkkien avulla.
Jos funktio on toisen funktion rungossa, sitä kutsutaan sisäkkäiseksi funktioksi.
Sisäkkäisen funktion syntakse
func funcname () (// ulkoisen funktion lauseet func anotherFuncname () (// sisäisen funktion lauseet))
Tässä funktio anotherFuncname
on toisen toiminnon rungossa funcname
.
On huomattava, että sisäisiä toimintoja voidaan kutsua ja käyttää vain sulkutoiminnon (ulompi toiminto) sisällä.
Esimerkki 1: Sisäkkäinen funktio ilman palautusarvoja
func outputMessageByGreeting(_ message: String) ( func addGreetingAndPrint() ( print("Hello! (message)") ) addGreetingAndPrint() ) outputMessageByGreeting("Jack")
Kun suoritat ohjelmaa, tulos on:
Hei! Jack
Yllä olevassa ohjelmassa sisäkkäistä toimintoa addGreetingAndPrint()
kutsutaan sulkeutuvasta toiminnosta outputMessageByGreeting()
.
Lauseke outputMessageByGreeting("Jack")
kutsuu ulompaa funktiota. Ja addGreetingAndPrint()
ulkoisen funktion sisällä oleva lause kutsuu menetelmää, joka tuottaa Hei! Jack konsolissa.
Et voi kutsua toimintoa sen addGreetingAndPrint
ulkopuolelle outputMessageByGreeting
.
Esimerkki 2: Sisäkkäinen toiminto parametreilla ja palautusarvoilla
Sisäkkäiset funktiot voivat sisältää toimintoja, joilla on parametreja ja palautusarvoja.
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)
Kun suoritat ohjelmaa, tulos on:
5
Yllä olevassa ohjelmassa
- ulompi funktio on
operate()
, palautusarvolla tyyppi Funktio(Int,Int) -> Int
. - ja sisäiset (sisäkkäiset) toiminnot ovat
add()
jasubtract()
.
Nested-toiminto add()
ja subtract()
siten käytetään ulkopuolella sulkevan toiminto operate()
. Tämä on mahdollista, koska ulompi funktio palauttaa yhden näistä toiminnoista.
Olemme käyttäneet sisäistä toimintoa sulkutoiminnon ulkopuolella operate()
kuten operation(2, 3)
. Ohjelma soittaa sisäisesti, add(2, 3)
mikä lähtö 5 konsolissa.