Ricerca…


introduzione

Funziona come un membro di prima classe significa che può godere dei privilegi proprio come fanno gli oggetti. Può essere assegnato a una variabile, passato a una funzione come parametro o può essere usato come tipo di ritorno.

Assegnazione di una funzione a una variabile

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))

Produzione:

[3, 5, 7, 9, 11, 13, 10, 8, 6, 4, 102]

Allo stesso modo, quanto sopra potrebbe essere ottenuto usando una 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))

Passaggio della funzione come argomento a un'altra funzione, creando così una funzione ordine superiore

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))

Produzione:

[3, 5, 7, 9, 11, 13, 10, 8, 6, 4, 102]

Allo stesso modo, quanto sopra potrebbe essere ottenuto usando una closure

// passing the closure directly to the function as param
print(math.performOperation(inputArray: arrayToBeProcessed, operation: { $0 * 2 }))

Funziona come tipo di ritorno da un'altra funzione

// function as return type
print(math.performComplexOperation(valueOne: 4)(5))

Produzione:

9



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow