如果我定义了以下枚举:
enum CardRank {
case number(Int)
case jack
case queen
case king
case ace
}
Run Code Online (Sandbox Code Playgroud)
let cardRank = CardRank.number(5)
if case .number = cardRank {
// is a number
} else {
// something else
}
Run Code Online (Sandbox Code Playgroud)
但是,我想将“这是一个数字”的布尔结果分配给一个变量,而不是使用 if 语句。
例如这样的事情:
let isNumber = (case .number = cardRank)
Run Code Online (Sandbox Code Playgroud)
但是,这给了我编译器错误:
error: expected expression in list of expressions
let isNumber = (case .number = cardRank)
^
Run Code Online (Sandbox Code Playgroud)
是否有类似的 1 行语法来使这种分配工作?
我得到的最接近的是这个,但它非常混乱:
let isNumber: Bool = { if case .number = cardRank { return true } else { return false } }()
Run Code Online (Sandbox Code Playgroud)
我知道我可以在 enum 上实现 Equatable 协议,然后执行以下操作:
let isAce = cardRank == .ace
Run Code Online (Sandbox Code Playgroud)
但我正在寻找一种不需要遵守 Equatable 协议的解决方案。
将其添加为枚举的属性:
extension CardRank {
var isNumber: Bool {
switch self {
case .number: return true
default: return false
}
}
}
let isNumber = cardRank.isNumber
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1763 次 |
| 最近记录: |