2014-09-29 2 views
8

Ich mache die exercism.io Programmierübungen und die Tests, die ich auf meinem Code durchführen muss, hat das Ziel, mit dicts miteinander zu vergleichen. Der Sourcecode der Übung kann https://github.com/exercism/xswift/tree/master/word-countXCTAssertEquals mit zwei dicts in Swift

Test code for comparing two dicts

Ab hier zu finden, was ich habe verstanden, bridgeToObjectiveC ist Äpfel interne Methoden für Dinge zu tun, und deshalb haben sie entfernt wurden. Mit ihnen bekomme ich '[S : T]' does not have a member named 'bridgeToObjectiveC' was sehr verständlich ist, wenn sie es entfernt haben.

Ohne die Methode, die nur die Parameter im AssertEquals-Aufruf verwendet, bekomme ich '[S : T]' does not conform to protocol 'Equatable'. Sind zwei Werte in Swift nicht vergleichbar? Wie würde ich tun, um sie vergleichbar zu machen?

+0

Bitte Codebeispiele als Text einfügen. Sie sollten vorformatierten Text sein. –

Antwort

7

Sie können die Gleichheit der Wörterbücher prüfen, solange die Werte Equatable sind. Ändern XCTAssertEqualDictionaries, um eine generische Einschränkung umfassen:

func XCTAssertEqualDictionaries<S, T: Equatable>(first: [S:T], _ second: [S:T]) { 
    XCTAssert(first == second) 
} 
+0

Danke, das ist ein vert bequemer Weg, es zu tun. – Johan

1

Nein, Swift-Wörterbücher sind nicht direkt vergleichbar. Zum Testen von Einheiten können Sie entweder manuelle Vergleiche ihrer Größen und paarweiser Elementvergleiche durchführen, oder Sie können die einfache Sache machen und NSDictionary aus ihnen erstellen und sie auf diese Weise vergleichen.

2

Versuchen

XCTAssertEqual(swiftDict as NSObject, objCDict as NSObject) 

Forces den Compiler einfach nur chillen und rufen Sie die isEqual: Methode auf beide.

Verwandte Themen