Neste artigo, você aprenderá sobre funções aninhadas no Swift e como elas funcionam com exemplos.
Se uma função existe dentro do corpo de outra função, é chamada de função aninhada.
Sintaxe de uma função aninhada
func funcname () (// instruções da função externa func anotherFuncname () (// instruções da função interna))
Aqui, a função anotherFuncname
está dentro do corpo de outra função funcname
.
Deve-se observar que as funções internas só podem ser chamadas e usadas dentro da função delimitadora (função externa).
Exemplo 1: função aninhada sem valores de retorno
func outputMessageByGreeting(_ message: String) ( func addGreetingAndPrint() ( print("Hello! (message)") ) addGreetingAndPrint() ) outputMessageByGreeting("Jack")
Quando você executa o programa, a saída será:
Olá! Jack
No programa acima, a função aninhada addGreetingAndPrint()
está sendo chamada a partir da função envolvente outputMessageByGreeting()
.
A instrução outputMessageByGreeting("Jack")
chama a função externa. E a instrução addGreetingAndPrint()
dentro da função externa chama o método que produz Hello! Jack no console.
Você não pode chamar a função addGreetingAndPrint
fora da função outputMessageByGreeting
.
Exemplo 2: função aninhada com parâmetros e valores de retorno
As funções aninhadas podem conter funções com parâmetros e valores de retorno.
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)
Quando você executa o programa, a saída será:
5
No programa acima,
- a função externa é
operate()
, com valor de retorno do tipo Function(Int,Int) -> Int
. - e as funções internas (aninhadas) são
add()
esubtract()
.
A função aninhada add()
e subtract()
de certa forma está sendo usada fora da função envolvente operate()
. Isso é possível porque a função externa retorna uma dessas funções.
Usamos a função interna fora da função envolvente operate()
como operation(2, 3)
. O programa chama internamente o add(2, 3)
que produz 5 no console.