因此,我使用Salesforce SDK併爲整個SDK構建了橋接標頭。Swift將AnyObject轉換爲塊
它們提供了一個沒有翻譯成最可用代碼的塊語法。例如,
func sendRESTRequest(request: SFRestRequest!, failBlock: SFRestFailBlock!, completeBlock: AnyObject!)
完整的塊是AnyObject !.我能夠解決這個問題
var block : @objc_block (dataResponse :AnyObject!) -> Void = { dataResponse in //I handle the response}
restService.sendRESTRequest(request, failBlock: { (error :NSError!) -> Void in
}, completeBlock: unsafeBitCast(block, AnyObject.self))
到目前爲止,這工作正常。但是,現在我正在嘗試爲此代碼構建單元測試。我爲SFRestAPI創建了一個模擬類,它是函數「sendRESTRequest」所在的類。出於測試目的,我試圖通過傳遞將從REST服務返回的模擬「數據」來模擬completeBlock:參數。
class MockSFRestAPI : SFRestAPI {
override func sendRESTRequest(request: SFRestRequest!, failBlock: SFRestFailBlock!, completeBlock: AnyObject!) {
//Convert complete block into a closure and pass in some test data
}
}
問題是,我無法投射AnyObject!像我可以像上面那樣將塊轉換爲AnyObject。
我的一些嘗試已經:
var block = completeBlock as @objc_block (AnyObject! -> Void)
var block2: (AnyObject! -> Void) = unsafeBitCast(completeBlock, (@objc_block (AnyObject! -> Void)))
已經有很多更多的嘗試,但這些似乎相對理智的只有兩個。那麼,這在Swift中可能嗎?這個問題似乎是我不能提供一個閉包「類型」的unsafeBitCast方法的第二個參數。我想把它變成一個閉包,所以我可以在我的模擬方法中調用它並傳入一些假數據。
我有同樣的isuue – fnc12 2014-12-23 14:57:03