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
中=
符号的左边。
我刚开始学习 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
中=
符号的左边。