在阅读如何使用关联值测试Swift枚举的相等性之后,我实现了以下枚举:
enum CardRank {
case Number(Int)
case Jack
case Queen
case King
case Ace
}
func ==(a: CardRank, b: CardRank) -> Bool {
switch (a, b) {
case (.Number(let a), .Number(let b)) where a == b: return true
case (.Jack, .Jack): return true
case (.Queen, .Queen): return true
case (.King, .King): return true
case (.Ace, .Ace): return true
default: return false
}
}
Run Code Online (Sandbox Code Playgroud)
以下代码有效:
let card: CardRank = CardRank.Jack
if card == CardRank.Jack {
print("You played a jack!") …Run Code Online (Sandbox Code Playgroud) class MyClass
{
enum MyEnum {
case FirstCase
case SecondCase(Int)
case ThirdCase
}
var state:MyEnum!
func myMethod ()
{
if state! == MyEnum.FirstCase {
// Do something
}
}
}
Run Code Online (Sandbox Code Playgroud)
我得到编译器错误指向if语句::
二进制运算符'=='不能应用于两个'MyClass.MyEnum'操作数
如果相反,我使用一个switch声明,没有问题:
switch state! {
// Also, why do I need `!` if state is already an
// implicitly unwrapped optional? Is it because optionals also
// are internally enums, and the compiler gets confused?
case .FirstCase:
// do something...
default:
// (do nothing)
break …Run Code Online (Sandbox Code Playgroud)