2015-02-11 110 views
0

在斯威夫特,当有人使用XCTest断言,他们可以写这样的断言:让XCTAssertions接受函数的返回值作为参数

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,字符串)“不符合协议“BooleanType”

什么是错误的原因,有什么东西,可以这样做,因此断言将接受来自函数的返回值作为其参数?

回答

1

XCTAssertFalse需要一个布尔的说法,你在一个元组(Boolean, String)通过在这个特定的情况下,这种情况下,尝试提取的布尔元素:

XCTAssertFalse(testData().0) 

它工作在printText因为迅速自动解成元组函数参数只要类型匹配即可。

+0

罢工,我会猜测这是因为'XCTAssertFalse(condition,format ...)',即它是一个可变参数函数,所以参数不能可靠地解压缩。 – 2015-02-12 05:36:05

相关问题