XCTAssertEquals с двумя предсказывает в Swift

Я делаю упражнение.упражнения по программированию io и тесты, которые я должен выполнить на своем коде, имеют цель сравнить друг с другом. Исходный код упражнения можно найти здесь https://github.com/exercism/xswift/tree/master/word-count

Test code for comparing two dicts

'[S : T]' does not have a member named 'bridgeToObjectiveC' что очень понятно, если они его удалили.

без метода, использующего только параметры в вызове AssertEquals, я получаю '[S : T]' does not conform to protocol 'Equatable'. Разве два Дикта не сопоставимы в Swift? Как бы я их сравнил?

3 ответов


вы можете проверить равенство словарей, пока значения Equatable. Изменить XCTAssertEqualDictionaries чтобы включить общее ограничение:

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

попробовать

XCTAssertEqual(swiftDict as NSObject, objCDict as NSObject)

заставляет компилятор просто расслабиться и вызвать isEqual: метод на обоих.


нет, словари Swift напрямую не сопоставимы. Для целей модульного тестирования вы можете либо выполнить ручные сравнения их размеров и парные сравнения элементов, либо вы можете сделать простую вещь и создать NSDictionaryиз них и сравнить их таким образом.