сочетание enum и замыкание

-2
    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) ~~~~ ^

  • 1
    Слово "унарный", а не "уринари" ...
  • 0
    Определение правильное, однако регистр enum не станет магически функцией. Вам нужно получить доступ к связанному значению (которое является замыканием) и затем вызвать это замыкание.
Показать ещё 1 комментарий
Теги:
enums
closures

1 ответ

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(/)
  • 0
    @leonshi Если это решит вашу проблему, пожалуйста, нажмите на галочку слева от ответа. Чтобы люди знали, что ваш вопрос решен.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню