Szukaj…


Wprowadzenie

Funkcje, które oznaczają pierwszorzędni członkowie, mogą cieszyć się przywilejami, podobnie jak Obiekty. Może być przypisany do zmiennej, przekazany do funkcji jako parametr lub może być użyty jako typ zwracany.

Przypisywanie funkcji do zmiennej

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

Wynik:

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

Podobnie powyższe można osiągnąć za pomocą 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))

Przekazywanie funkcji jako argumentu do innej funkcji, tworząc w ten sposób funkcję wyższego rzędu

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

Wynik:

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

Podobnie powyższe można osiągnąć za pomocą closure

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

Funkcja jako typ powrotu z innej funkcji

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

Wynik:

9



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow