【发布时间】:2019-07-30 19:47:05
【问题描述】:
这是我的代码:
enum ServerResponse {
case ok, error(Error), rawError(String), resend
func isOk(response: ServerResponse) -> Bool {
case ServerResponse.ok = response
}
}
它没有编译并出现以下错误:
“case”标签只能出现在“switch”语句中
这很奇怪,因为这是允许的:
func isOk(response: ServerResponse) -> Bool {
if case ServerResponse.ok = response {
return true
}
return false
}
但正如我们所看到的,这会花费我额外的代码行。我希望它能够工作,因为在 Swift 中,只允许使用布尔值。 The docs说:
if 语句中任何条件的值必须是 Bool 类型 或 一种桥接到 Bool 的类型
这意味着该行应该计算为布尔值,因为上面的代码可以编译,并且该代码行是 if 语句中的条件:
case ServerResponse.ok = response
为什么我不能使用它直接在方法中返回布尔值(问题中的第一个代码)?是否有任何 oneliner 可以检查给定的枚举属性是否是给定的枚举案例?
【问题讨论】:
-
两班:
func isOk(response: ServerResponse) -> Bool { guard case .ok = response else { return false } return true }
标签: swift enums switch-statement pattern-matching