Swift Language
Funcionar como ciudadanos de primera clase en Swift
Buscar..
Introducción
Funciones como miembros de primera clase significa que puede disfrutar de privilegios al igual que los objetos. Puede asignarse a una variable, pasarse a una función como parámetro o puede usarse como tipo de retorno.
Asignando función a una variable
struct Mathematics
{
internal func performOperation(inputArray: [Int], operation: (Int)-> Int)-> [Int]
{
var processedArray = [Int]()
for item in inputArray
{
processedArray.append(operation(item))
}
return processedArray
}
internal func performComplexOperation(valueOne: Int)-> ((Int)-> Int)
{
return
({
return valueOne + $0
})
}
}
let arrayToBeProcessed = [1,3,5,7,9,11,8,6,4,2,100]
let math = Mathematics()
func add2(item: Int)-> Int
{
return (item + 2)
}
// assigning the function to a variable and then passing it to a function as param
let add2ToMe = add2
print(math.performOperation(inputArray: arrayToBeProcessed, operation: add2ToMe))
Salida:
[3, 5, 7, 9, 11, 13, 10, 8, 6, 4, 102]
Del mismo modo lo anterior podría lograrse mediante un closure
// assigning the closure to a variable and then passing it to a function as param
let add2 = {(item: Int)-> Int in return item + 2}
print(math.performOperation(inputArray: arrayToBeProcessed, operation: add2))
Pasar la función como un argumento a otra función, creando así una función de orden superior
func multiply2(item: Int)-> Int
{
return (item + 2)
}
let multiply2ToMe = multiply2
// passing the function directly to the function as param
print(math.performOperation(inputArray: arrayToBeProcessed, operation: multiply2ToMe))
Salida:
[3, 5, 7, 9, 11, 13, 10, 8, 6, 4, 102]
Del mismo modo lo anterior podría lograrse mediante un closure
// passing the closure directly to the function as param
print(math.performOperation(inputArray: arrayToBeProcessed, operation: { $0 * 2 }))
Función como tipo de retorno de otra función.
// function as return type
print(math.performComplexOperation(valueOne: 4)(5))
Salida:
9
Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow