Swift 中的枚举模式匹配

enum pattern matching in Swift

我刚开始学习 Swift 并试图了解模式匹配。

我找到了下一个例子:

private enum Entities{
  case Operand(Double)
  case UnaryOperation(Double -> Double)
  case BinaryOperation((Double, Double) -> Double)
}

后来我使用模式匹配来确定实体的类型

func evaluate(entity: Entities) -> Double? {
    switch entity{
    case .Operand(let operand):
        return operand;

    case .UnaryOperation(let operation):
        return operation(prevExtractedOperand1);

    case .BynaryOperation(let operation):
        return operation(prevExtractedOperand1, prevExtractedOperand2);
    }
}

获取关联值的语法看起来有点奇怪,但它工作正常。

之后我发现,可以在 if 语句中使用模式匹配,所以我尝试对 if

做同样的事情
if case entity = .Operand(let operand){
    return operand
}

但是编译器抛出错误 Expected ',' separator,我怀疑这与错误的真正原因没有任何共同之处。

你能帮我理解一下,我尝试在 if 语句中使用模式匹配有什么问题吗?

我想你想要的语法是这样的:

if case .Operand(let operand) = entity {
    return operand
}

或者这个:

if case let .Operand(operand) = entity {
    return operand
}

要绑定的变量需要在let=符号的左边。