2015-02-11 49 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

相關問題