7
鑑於以下斯威夫特類工作Equatable類型XCTAssertEqual不是斯威夫特
func testExample() {
let a = TestObject(a: 4)
let b = TestObject(a: 4)
XCTAssertEqual(a, b) // fails
let isEqual = a == b
XCTAssert(isEqual) // passes
}
兩個斷言的返回值不同,但他們應該都通。
我試着寫一個自定義的斷言功能:
func BAAssertEquatable<A: Equatable>(x1: A, _ x2: A, _ message: String, file: String = __FILE__, line: UInt = __LINE__) {
let operandsEqual = (x1 == x2)
XCTAssert(operandsEqual, message, file: file, line: line)
}
而且這也失敗:
BAAssertEquatable(a, b, "custom assert") // fails
這是怎麼回事?
+1爲非常好的分析。不幸的是,我只能猜測問題並推薦進一步分析。對我來說,它看起來像迅速地方失去你「的TestObject」實現Equatable協議的信息。你可以給你的操作符添加一個'打印'功能嗎?我期望它在有關案件中沒有被調用。此外,我所期待的的「FUNC ==」前面加上一個「重寫」不知何故。抱歉,我目前無法提供更好的幫助。 – jboi
@jboi你說得對 - ==操作符只被調用一次(在testExample直接調用),但它應該被稱爲三次。我不能在頂層(這是一個語法錯誤)使用override關鍵字。 – Bill
我認爲這是相關的bug /問題在這裏:http://stackoverflow.com/questions/31099379/bug-with-equals-operator-and-nsobjects-in-swift-2-0 – Bill