2016-05-13 67 views
0

假設您的承諾鏈中有一個分支,可以返回任何內容或AnyObject承諾。你會指定什麼作爲'then'閉包的返回類型?例如:PromiseKit分支承諾

func sample() -> Promise<AnyObject> { 
    return Promise { fulfill, reject in 
     fulfill(1) 
    } 
    .then { _ -> Void in 
     if false { 
      return Promise { fulfill, reject in 
       fulfill(0) 
      } 
     } 
    } 
} 

如果我把Void作爲'then'閉包的返回類型,我得到一個seg故障;如果我把Promise作爲返回類型,那麼我得到一個錯誤:

missing return in a closure expected to return Promise<AnyObject> 

有什麼建議嗎?

謝謝

+0

如果使用'Promise'作爲返回類型,則必須返回一個Promise。現在你只能在'if false'的情況下這樣做,永遠不會執行。 – jtbandes

+0

如果我改變爲'FUNC樣品() - >無極 { 返回無極{履行,拒絕 滿足(1) }。然後{_ - >在 debugPrint( 「foo」 的)空隙 }。然後{ _ - >無極在 如果假{ 回報承諾{履行,拒絕 落實(0) } } 回報承諾{履行,拒絕 履行(0) } } }'它的工作原理;但似乎有點跛腳,我不得不明確地返回一個空的承諾@jtbandes – bunana

+0

你的目標是什麼?爲什麼你有這個'假'分支? – jtbandes

回答

1

基於代碼示例,我沒有理由返回AnyObject。如果你想有選擇地返回Void或者Object,那麼做一個包含可選項的承諾。

func sample() -> Promise<AnyObject?> { 
    return Promise { fulfill, reject in 
     functionForGettingObjectWithCallback() { result: AnyObject? in 
      fulfill(result) 
     } 
    } 
}