我创建了一个枚举类型(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值和'如果'语句???
谢谢;)
答案 0 :(得分:2)
您需要为您的类型声明符合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
}
}
}
答案 1 :(得分:1)
if case
可用于比较枚举值。
您使用
if case .success = tr {
// do something
}
而不是您当前正在进行的==
比较。