如何比较包含其他构造函数值的Swift枚举

时间:2016-07-28 11:13:19

标签: swift enums

我对如何比较一些枚举有疑问。让我告诉你最简单的例子:

class ViewController: UIViewController {

    enum MyEnum {
        case FirstCase
        case SecondCase(subvalue: Int) // coment out to be able to compile
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        let value: MyEnum = .FirstCase

        if value == .FirstCase { // will not compile if "case SecondCase(subvalue: Int)" is included into the enum
            print("They are the same")
        }
    }
}

因此,case SecondCase(subvalue: Int)因某些原因无法使if语句失效。通过删除代码编译。

那么有没有办法为这些枚举创建一个正常的比较?这是一个Swift错误吗?

只是为了澄清如何使用这种枚举:

    enum MyEnum {
        case FirstCase
        case SecondCase(subvalue: Int) // coment out to be able to compile

        func printValue() {
            switch self {
            case .FirstCase:
                print("First case")
            case .SecondCase(let subvalue):
                print("Second case \(subvalue)")
            }
        }
    }

对于诸如定义需要额外参数的端点这样的情况非常方便。

实际进行检查有一个非常愚蠢的伎俩,但你必须使用switch声明:

        switch value {
        case .FirstCase:
            print("They are the same")
        default:
            break
        }

这是在正常if没有的情况下进行编译的!

0 个答案:

没有答案