2014-10-07 1 views
5

Небольшое знание, у меня есть функция первого класса, заключается в том, что он поддерживает передачу функций в качестве аргументов, и мы также можем вернуть их как значения в другой функции ... Я очень новичок в языке программирования Swift, пожалуйста, проконсультируйтесь с ним пример.«Функции являются первоклассным типом» в swift?

+5

Вы хотите прочитать [Типы функций] (https://developer.apple.com /library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html#//apple_ref/doc/uid/TP40014097-CH10-XID_270) в книге Apple Swift. –

ответ

8

Очень простой пример, чтобы продемонстрировать это поведение:

func functionA() { 
    println("Hello by functionA") 
} 

func executeFunction(function:() ->()) { 
    function() 
} 

executeFunction(functionA) 
1

функция, которая возвращает функцию во время захвата значения из лексической среды:

enter image description here

функции от массива Сравнения, которые возвращают функцию тестового предиката, которая возвращает функцию значения, возвращающего Bool, если это значение является экстремумом тестируемого массива. (Каррирование) функции

enter image description here

2

первого класса являются функциями, которые могут возвращать другие функции. Например:

func operate(operand: String) -> ((Double, Double) -> Double)?{ 

    func add(a: Double, b: Double) -> Double { 
     return a + b 
    } 

    func min(a: Double, b: Double) -> Double{ 
     return a - b 
    } 

    func multi(a: Double, b: Double) -> Double { 
     return a * b 
    } 

    func div (a: Double, b: Double) -> Double{ 
     return a/b 
    } 

    switch operand{ 
    case "+": 
     return add 
    case "-": 
     return min 
    case "*": 
     return multi 
    case "/": 
     return div 
    default: 
     return nil 
    } 
} 

Функция operate возвращает функцию, которая принимает два двухместных номера в качестве аргументов и возвращает один дубль.

Использование этой функции:

var function = operate("+") 
print(" 3 + 4 = \(function!(3,4))") 

function = operate("-") 
print(" 3 - 4 = \(function!(3,4))") 

function = operate("*") 
print(" 3 * 4 = \(function!(3,4))") 

function = operate("/") 
print(" 3/4 = \(function!(3,4))") 

Если вы не заботитесь о выполнении функции, используя функции первого класса, чтобы вернуть эти функции становятся бенефициалы. Кроме того, иногда вы не несете ответственность за разработку (или не авторизацию) функций, таких как add, min. Поэтому кто-то разработает для вас функцию первого класса, которая вернет эти функции, и вы несете ответственность за продолжение.

+0

Спасибо за подробное объяснение – skkrish