Заставить XCTASsertions принимать возвращаемые значения функции в качестве аргументов

В Swift, когда кто-то использует утверждения XCTest, они могут написать утверждение следующим образом:

XCTAssertTrue(foo.sameAs(bar), "\(foo) is not equal to \(bar)")

Это позволяет использовать дополнительный контекст, когда утверждение не позволяет кому-то узнать больше о том, почему что-то пошло не так.

Дальше еще как-то так:

func printText(shouldPrint: BooleanType, text: String) {
    if shouldPrint {
        println("\(text)")
    }
}

func textData() -> (BooleanType, String) {
    return (true, "This is a test.")
}

printText(textData())

Скомпилируется и успешно запустится, распечатав «Это тест». Однако следующее:

XCTAssertFalse(textData())

выдает ошибку компиляции: тип '(BooleanType, String)' не соответствует протоколу 'BooleanType'

В чем причина ошибки и что можно сделать, чтобы утверждение принимало возвращаемые значения из функции в качестве аргументов?


person Tron Thomas    schedule 11.02.2015    source источник


Ответы (1)


XCTAssertFalse ожидает логический аргумент, в этом случае вы передаете кортеж (Boolean, String) В этом конкретном случае попробуйте извлечь логический элемент:

XCTAssertFalse(testData().0)

Это работает в printText, потому что Swift автоматически распаковывает кортежи в параметры функции, если типы совпадают.

person David Berry    schedule 11.02.2015
comment
Ударьте, я собираюсь предположить, что это потому, что XCTAssertFalse(condition, format...) т. е. это функция с переменным числом аргументов, поэтому аргументы не могут быть надежно распакованы. - person David Berry; 12.02.2015