Swift 3关联值枚举比较语法与OR(`||`)

Eli*_*ise 1 enums swift swift3

我有一个带有相关值的枚举,ChatItemType:

enum ChatItemType {
  case message(ChatBubbleType)
  case log
  case timestamp
}
Run Code Online (Sandbox Code Playgroud)

我在if语句中做这样的比较:

if case .log = givenType {
  return true
} else if case .timestamp = givenType {
  return true
} else {
  return false
}
Run Code Online (Sandbox Code Playgroud)

当它们都返回时,将第一个和第二个语句组合起来显然是有意义的true.但使用||我希望它使用的方式似乎给我一个语法错误:

if case .log = givenType || case .timestamp = givenType

我知道我可以只检查.message类型而不是返回true,但ChatItemType将来可能会添加更多s,所以我还是想知道如何正确组合比较.

我发现很难在网上找到答案主要是因为我不确定引用这些概念的正确术语.那里也有任何指导意见.

Mar*_*n R 7

您无法与if语句中的多个模式进行比较(据我所知),但您可以在switch语句中执行此操作:

switch givenType {
case .log, .timestamp:
    return true
case .message: 
    return false
}
Run Code Online (Sandbox Code Playgroud)

(显式枚举所有情况而不是使用默认情况可确保在以后将另一个案例添加到该类型时不会忘记更新函数.)