2016-06-25 2 views
0

Скажем, у меня есть следующий код:Вызов функции объекта, который принимает функцию в качестве параметра

import Foundation 

enum Operation { 
    case BinaryOperation ((Double, Double) -> Double) 
} 

var multiply = Operation.BinaryOperation({$0 * $1}) 

//Error: Cannot call value of non-function type 'Operation' 
multiply(3.0,2.0) 

Как бы я назвал функцию умножения здесь?

ответ

1

Ваша функция - это связанное значение значения перечисления, поэтому перед его вызовом необходимо извлечь его. Один из способов сделать это является использование сопоставления с образцом:

if case let .BinaryOperation(function) = multiply { 
    function(3.0, 2.0) 
} 

Это также можно записать в виде:

if case .BinaryOperation(let function) = multiply { 
    function(3.0, 2.0) 
} 
Смежные вопросы