Swe*_*per 7 enums pattern-matching swift
请注意,我已阅读此帖,但该帖子使用了switch语句,当模式匹配时,它应该执行某些操作(返回true).另一方面,如果模式匹配并使用if-case语句,我不想做任何事情.
我有这个枚举:
enum MyEnum {
case a
case b(Int)
case c
case d
}
Run Code Online (Sandbox Code Playgroud)
这是它的一个实例:
let myEnum: MyEnum = .a
Run Code Online (Sandbox Code Playgroud)
现在我想要做一些事情,如果myEnum不是.b.由于.b有一个关联的值,我不能简单地使用if语句检查:
if myEnum != .b { // compiler error
// do my thing here
}
Run Code Online (Sandbox Code Playgroud)
所以我必须使用if-case语句来模式匹配它:
if case .b(_) = myEnum {
} else {
// do my thing here
}
Run Code Online (Sandbox Code Playgroud)
但我真的很讨厌使用空if子句.这对我来说只是看起来不够.我试图天真地这样做:
if case .b(_) != myEnum { // compiler error!
// do my thing here
}
Run Code Online (Sandbox Code Playgroud)
除了使用空的if子句之外,还有更好的方法吗?
无论模式是否匹配,我仍然有应该运行的代码,因此guard语句将不起作用.
dfr*_*fri 11
这纯粹是对您自己的代码的最小语义更改,但请注意,您可以简单地"丢弃" if与case模式匹配内联的空子句:
if case .b(_) = myEnum {} else {
// do your thing here
}
Run Code Online (Sandbox Code Playgroud)
或者,省略与案例相关值的冗余模式匹配b:
if case .b = myEnum {} else {
// do your thing here
}
Run Code Online (Sandbox Code Playgroud)
这看起来有点像一个guard子句,但没有退出范围.
您可以使用guard:
guard case .b = myEnum else {
// do your stuff here
return
}
Run Code Online (Sandbox Code Playgroud)
缺点是您必须退出范围...
| 归档时间: |
|
| 查看次数: |
2600 次 |
| 最近记录: |