相关疑难解决方法(0)

如何通过忽略Swift中的关联值来比较枚举与关联值?

在阅读如何使用关联值测试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)

comparison enums swift

75
推荐指数
5
解决办法
2万
查看次数

比较枚举类型的值与关联值时的编译器错误?

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)

enums if-statement binary-operators swift

2
推荐指数
1
解决办法
920
查看次数