Swift枚举的非穷尽模式匹配

3

我有一个枚举类型,我只想在某些情况下执行代码,而其他情况下什么也不做(非穷尽)

这似乎对于Swift来说过于冗长了。

if num == .One || num == .Two || num == .Three || num == .Four {
    //code
}

这使得我只能使用默认情况,即使我不想做任何事情,仍然必须添加类似于print的内容。
switch num {
case .One, .Two. Three, .Four:
    //code
default:
    print("do nothing but I still need to put something here")
}

我想做类似这样的事情...在Swift中是否存在这样的方式?
if case .One, .Two, .Three, .Four == num {
    //code            
}

2
创建一个数组并使用它的contains方法。这是函数式的方式。 - Sulthan
2
你可以使用 break 代替 print。我倾向于使用更加简洁的 break,而且不会有使用 print 带来的性能损失。 - AdamPro13
你也可以使用 switch,但是需要添加一个 default 语句,它可以是 default: () 或者 default: break - Rob
1
Swift的穷举式switch语句中的Noop - jscs
2个回答

5
您可以始终添加一个没有任何操作的默认情况:
switch value {
case .One:
    Some code here

default:
    break
}

break语句通常用于表示一个case没有动作,同时显式地终止操作。


4
if [.One, .Two, .Three, .Four].contains(num) {

1
我昨天看到了一个有趣的包装器:extension Equatable { func equals(any: Self...) -> Bool { return any.contains(self) }},它允许您使用 Equatable 编写 num.equals(any: .One, .Two, .Three, .Four)。(在 Swift 3 中,您需要在 v2 中添加一个显式的第一个标签名称。) - jscs

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