Sök…


Introduktion

Funktioner som första klassens medlemmar betyder, det kan njuta av privilegier precis som objekt gör. Det kan tilldelas en variabel, vidarebefordras till en funktion som parameter eller kan användas som returtyp.

Tilldela funktion till en variabel

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

Produktion:

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

På liknande sätt kunde ovanstående uppnås med användning av en 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))

Vidarebefordra funktionen som ett argument till en annan funktion, vilket skapar en funktion med högre ordning

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

Produktion:

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

På liknande sätt kunde ovanstående uppnås med användning av en closure

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

Funktion som returtyp från en annan funktion

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

Produktion:

9



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow