private enum Operation {
case BinaryOperation((Double, Double) -> Double)
case UrinaryOperation((Double) -> Double)
}
let plus = Operation.BinaryOperation({$0 + $1})
let minus = Operation.BinaryOperation({$0 - $1})
let multiply = Operation.BinaryOperation({$0 * $1})
let divide = Operation.BinaryOperation({$0 / $1})
plus(3.0,2.0)
Однако, я получил следующую ошибку:
MyPlayground.playground: 5: 13: ошибка: не может вызывать значение нефункционного типа "Operation" plus (3.0.2.0) ~~~~ ^
Правильный синтаксис для того, что вы пытаетесь сделать:
if case let Operation.BinaryOperation(operation) = plus {
operation(3.0, 2.0) // results in 5.0
}
Вам нужно получить связанное значение перечисления.
Обратите внимание, что ваши замыкания могут быть упрощены до
let plus = Operation.BinaryOperation(+)
let minus = Operation.BinaryOperation(-)
let multiply = Operation.BinaryOperation(*)
let divide = Operation.BinaryOperation(/)