I den här artikeln lär du dig om kapslade funktioner i Swift och hur det fungerar med exempel.
Om det finns en funktion inuti kroppen för en annan funktion kallas den kapslad funktion.
Syntax för en kapslad funktion
func funcname () (// uttalanden för yttre funktion func anotherFuncname () (// uttalanden om inre funktion))
Här är funktionen anotherFuncname
inuti kroppen för en annan funktion funcname
.
Det bör noteras att inre funktioner endast kan anropas och användas i den omslutande funktionen (yttre funktion).
Exempel 1: Kapslad funktion utan returvärden
func outputMessageByGreeting(_ message: String) ( func addGreetingAndPrint() ( print("Hello! (message)") ) addGreetingAndPrint() ) outputMessageByGreeting("Jack")
När du kör programmet blir resultatet:
Hej! Jack
I ovanstående program addGreetingAndPrint()
anropas den kapslade funktionen från den inneslutande funktionen outputMessageByGreeting()
.
Uttalandet outputMessageByGreeting("Jack")
kallar den yttre funktionen. Och uttalandet addGreetingAndPrint()
inuti den yttre funktionen kallar metoden som matar ut Hej! Jack i konsolen.
Du kan inte ringa funktionen addGreetingAndPrint
utanför funktionen outputMessageByGreeting
.
Exempel 2: Kapslad funktion med parametrar och returvärden
Kapslade funktioner kan innehålla funktioner med parametrar och returvärden.
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)
När du kör programmet blir resultatet:
5
I ovanstående program,
- den yttre funktionen är
operate()
, med returvärdet av typen Funktion(Int,Int) -> Int
. - och de inre (kapslade) funktionerna är
add()
ochsubtract()
.
Den kapslad funktion add()
och subtract()
på ett sätt används utanför den omslutande funktionen operate()
. Detta är möjligt eftersom den yttre funktionen returnerar en av dessa funktioner.
Vi har använt den inre funktionen utanför den inneslutande funktionen operate()
som operation(2, 3)
. Programmet ringer internt add(2, 3)
vilka utgångar 5 i konsolen.