我想測試兩個Swift枚舉值的相等性。例如:enum SimpleToken { case Name(String) case Number(Int)}let t1 = SimpleToken.Number(123)let t2 = SimpleToken.Number(123)XCTAssert(t1 == t2)但是,編譯器不會編譯相等表達式:error: could not find an overload for '==' that accepts the supplied arguments XCTAssert(t1 == t2) ^~~~~~~~~~~~~~~~~~~我是否定義了自己自己的等于運算符的重載?我希望Swift編譯器能夠自動處理它,就像Scala和Ocaml一樣。
3 回答

慕桂英4014372
TA貢獻1871條經驗 獲得超13個贊
正如其他人指出的那樣,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語句里面。
- 3 回答
- 0 關注
- 1081 瀏覽
添加回答
舉報
0/150
提交
取消