有存储枚举的条件枚举开关

4
我希望这段代码能够正常运行。
我有一个枚举,其中 Direction.Right 情况需要一个距离参数。
enum Direction {
    case Up
    case Down
    case Left
    case Right(distance: Int)
}

现在又有一个枚举类型可以接受Direction参数。
enum Blah {
    case Move(direction: Direction)
}

let blah = Blah.Move(direction: Direction.Right(distance: 10))

当我启用Blah枚举时,我希望能够有条件地启用Move.Right,就像这样...

switch blah {
case .Move(let direction) where direction == .Right:
    print(direction)
default:
    print("")
}

但是我遇到了错误...

二元运算符“==”不能应用于类型为“Direction”的操作数和“_”

有没有办法解决这个问题?


2
你的 case .Move(let direction) where direction == .Up: 对我来说完全正常。 - Martin R
@MartinR 嗯...我得到了Binary operator == cannot be applied to operands of type Direction and _的错误。可能是清理和构建问题,不过我会看一下的,谢谢。 - Fogmeister
@MartinR 哦,看起来如果你给 Direction 添加一个 distance 就会出错。让我来编辑一下... - Fogmeister
1个回答

8
这其实很简单 :)
    case .Move(.Up):
        print("up")
    case .Move(.Right(let distance)):
        print("right by", distance)

您的代码
    case .Move(let direction) where direction == .Right:

无法编译,因为默认情况下只有没有相关值的枚举类型才定义了==


太好了,而且非常有道理。我正打算在参数中进行编辑。谢谢 :D - Fogmeister

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接