迅捷4.1+
正如@jedwid有用地指出的那样,从Swift
4.1开始(由于SE-0185,Swift还支持合成
Equatable以及
Hashable具有关联值的枚举。
因此,如果您使用的是Swift 4.1或更高版本,则以下内容将自动合成可行的必要方法
XCTAssert(t1 ==t2)。关键是将
Equatable协议添加到您的枚举中。
enum SimpleToken: Equatable { case Name(String) case Number(Int)}let t1 = SimpleToken.Number(123)let t2 = SimpleToken.Number(123)在Swift 4.1之前
正如其他人指出的那样,Swift不会自动综合必要的相等运算符。不过,让我提出一个更清洁的(IMHO)实现:
enum SimpleToken: Equatable { case Name(String) case Number(Int)}public func ==(lhs: SimpleToken, rhs: SimpleToken) -> Bool { switch (lhs, rhs) { case let (.Name(a), .Name(b)), let (.Number(a), .Number(b)): return a == b default: return false }}这远非理想-重复很多-但至少您不需要在内部带有if语句的嵌套开关。



