În acest articol, veți afla despre funcțiile imbricate în Swift și cum funcționează cu exemple.
Dacă există o funcție în corpul altei funcții, aceasta se numește funcție imbricată.
Sintaxa unei funcții imbricate
func funcname () (// instrucțiuni ale funcției externe func anotherFuncname () (// instrucțiuni ale funcției interioare))
Aici, funcția anotherFuncname
se află în corpul altei funcții funcname
.
Trebuie remarcat faptul că funcțiile interioare pot fi apelate și utilizate numai în interiorul funcției de închidere (funcția exterioară).
Exemplul 1: Funcție imbricată fără valori returnate
func outputMessageByGreeting(_ message: String) ( func addGreetingAndPrint() ( print("Hello! (message)") ) addGreetingAndPrint() ) outputMessageByGreeting("Jack")
Când rulați programul, ieșirea va fi:
Salut! Jack
În programul de mai sus, funcția imbricată addGreetingAndPrint()
este apelată din funcția de închidere outputMessageByGreeting()
.
Declarația outputMessageByGreeting("Jack")
apelează funcția exterioară. Și declarația din addGreetingAndPrint()
interiorul funcției externe numește metoda care produce ieșire Bună ziua! Jack în consolă.
Nu puteți apela funcția addGreetingAndPrint
în afara funcției outputMessageByGreeting
.
Exemplul 2: Funcție imbricată cu parametri și valori returnate
Funcțiile imbricate pot conține funcții cu parametri și valori returnate.
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)
Când rulați programul, ieșirea va fi:
5
În programul de mai sus,
- funcția exterioară este
operate()
, cu valoarea returnată de tipul Funcție(Int,Int) -> Int
. - iar funcțiile interioare (imbricate) sunt
add()
șisubtract()
.
Funcția imbricată add()
și subtract()
într-un fel sunt utilizate în afara funcției de închidere operate()
. Acest lucru este posibil deoarece funcția exterioară returnează una dintre aceste funcții.
Am folosit funcția interioară în afara funcției de închidere operate()
ca operation(2, 3)
. Programul apelează intern add(2, 3)
ce ieșire 5 în consolă.