Cada función ten un tipo específico, o cal se compón do tipo dos parámetros e do tipo de devolución da función.
Así, a seguinte función:
func sumarDousEnteiros(_ a: Int, _ b: Int) -> Int {
return a + b
}
O tipo destas dúas funcións é (Int, Int) -> Int
. Isto pode lerse como:
«Unha función que ten dous parámetros, ambos de tipo Int, e que devolve un valor de tipo Int.»
Usando tipos de funcións #
É posible usar tipos de funcións do mesmo xeito que calquera outro tipo en Swift:
func sumarDousEnteiros(_ a: Int, _ b: Int) -> Int {
return a + b
}
var funcionMatematica: (Int,Int)->Int = sumarDousEnteiros
print("Chamada á función sumarDousEnteiros a través da variable funcionMatematica. Resultado: \(funcionMatematica(2,3))")
//Imprime: Chamada á función sumarDousEnteiros a través da variable funcionMatematica. Resultado: 5
Tipos de función como valores de devolución #
Podes utilizar o tipo dunha función como o valor de devolución doutra función.
Para isto, escribes o tipo dunha función completo inmediatamente despois da frecha de devolución (->
) da función que devolve:
func avanzar(_ input: Int) -> Int {
return input + 1
}
func regresar(_ input: Int) -> Int {
return input - 1
}
func elegirFuncionDeMovimiento(debeRegresar: Bool) -> (Int) -> Int {
return debeRegresar ? regresar : avanzar
}
var valorActual = 3
let moverseHaciaCero = elegirFuncionDeMovimiento(debeRegresar: valorActual > 0)
// moverseHaciaCero ahora se refiere a la función regresar()
while valorActual != 0 {
print("Valor actual: \(valorActual)...")
valorActual = moverseHaciaCero(valorActual)
}
//Imprime:
//Valor actual: 3...
//Valor actual: 2...
//Valor actual: 1..."