gpt4 book ai didi

swift - XCTAssertEqual 不适用于 Swift 中的 Equatable 类型

转载 作者:IT王子 更新时间:2023-10-29 05:43:55 26 4
gpt4 key购买 nike

给定以下 Swift 类:

class TestObject: NSObject {
let a: Int

init(a: Int) {
self.a = a
super.init()
}
}

func ==(lhs: TestObject, rhs: TestObject) -> Bool {
return lhs.a == rhs.a
}

及其测试用例:

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

这是怎么回事?

最佳答案

XCTAssertEqual 调用 isEqual 而不是 ==,例如这将使您的测试通过:

class TestObject: NSObject {

// ...

override public func isEqual(_ object: Any?) -> Bool {
guard let other = object as? TestObject else { return false }
return self == other
}

}

关于swift - XCTAssertEqual 不适用于 Swift 中的 Equatable 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32500821/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com