在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())
产生编译错误:type'(BooleanType,String)'不符合协议' BooleanType'
错误的原因是什么,以及可以做什么,以便断言将接受函数的返回值作为其参数?
答案 0 :(得分:1)
XCTAssertFalse
需要一个布尔参数,在这种情况下,你传入一个元组(Boolean, String)
在这种特殊情况下,尝试提取布尔元素:
XCTAssertFalse(testData().0)
它适用于printText
,因为只要类型匹配,swift会自动将元组解包为函数参数。