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

慕桂英4014372
TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超13個(gè)贊
正如其他人指出的那樣,Swift不會自動綜合必要的相等運(yùn)算符。不過,讓我提出一個(gè)更清潔的(IMHO)實(shí)現(xiàn):
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
}
}
這是很不理想 - 有很多重復(fù)的 - 但至少你不需要做嵌套開關(guān),if語句里面。
- 3 回答
- 0 關(guān)注
- 1078 瀏覽
添加回答
舉報(bào)
0/150
提交
取消