首页 > 解决方案 > 是否可以将枚举值与“if”语句进行比较?

问题描述

我创建了一个枚举类型(Swift 4.0):

enum TraceResult{
    case nothing
    case success
    case failed
    case custom(String)   //#1
}

之后我决定比较两个枚举值:

let tr = TraceResult.nothing
if tr == TraceResult.success{    //#2
    //do something...
}

编译器会在第 2 行报错:

二元运算符“==”不能应用于两个“TraceResult”操作数

如果我删除第 1 行,没关系!!!

或者我用'switch'语句来比较它们,也可以!!!

那么是否可以将两个 TraceResult 值与“if”语句进行比较???

谢谢 ;)

标签: swiftenumscompare

解决方案


您需要Equatable为您的类型声明符合性:

enum TraceResult: Equatable {
    case nothing
    case success
    case failed
    case custom(String)
}

从 Swift 4.1 开始,编译器会自动==为你合成函数的定义。在 4.1 之前,您需要手动实现,如下所示:

extension TraceResult: Equatable {
    static func == (lhs: TraceResult, rhs: TraceResult) -> Bool {
        switch (lhs, rhs) {
            case (.nothing, .nothing): return true
            case (.success, .success): return true
            case (.failed, .failed): return true
            case (.custom(let s1), .custom(let s2)) where s1 == s2: return true

            case _: return false
        }
    }
}

推荐阅读