7
yılında Equatable türleri için çalışmıyor XCTAssertEqualaşağıdaki Swift sınıf Verilen Swift
func testExample() {
let a = TestObject(a: 4)
let b = TestObject(a: 4)
XCTAssertEqual(a, b) // fails
let isEqual = a == b
XCTAssert(isEqual) // passes
}
iki iddia dönüşü farklı değerler, ama ikisi de pas gerektiği .
Özel bir assert fonksiyonu yazma çalıştı: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)
}
ancak bu da başarısız:
BAAssertEquatable(a, b, "custom assert") // fails
Burada neler oluyor? Örneğin, ==
yerine isEqual
numaralarını
+1 test girişinizi yapacaktır. Maalesef yalnızca sorunu tahmin edebilir ve daha fazla analiz önerebilirim. Benim için bir yerde hızlı bir şekilde 'TestObject' ekolaylabilir Protokolü uyguladığı bilgileri kaybeder gibi görünüyor. Operatör fonunuza 'baskı' ekleyebilir misiniz? Söz konusu davalarda bunun yapılmasını beklemiyorum. Ayrıca 'func ==' önünde bir şekilde 'geçersiz kılma' beklerdim. Üzgünüm şu anda daha iyi olamam. – jboi
@jboi Haklısınız - == operatörü sadece bir kez çağrılıyor (testExample'de doğrudan aramada), ancak üç kez çağrılmalıdır. Üst düzeydeki geçersiz kılma anahtar sözcüğünü kullanamıyorum (sözdizimi hatası). – Bill
Bunun hata/sorunla ilgili olduğunu düşünüyorum: http://stackoverflow.com/questions/31099379/bug-with-equals-operator-and-nsobjects-in-swift-2-0 – Bill