2017-07-01 36 views
1

我是Swift中的承諾新手,並且使用PromiseKit嘗試在操場中創建一個非常簡單的響應並嘗試使用它。我有以下代碼:錯誤:無法使用Swift + PromiseKit將類型'() - >()'的值轉換爲關閉結果類型'String'

//: Playground - noun: a place where people can play 

import UIKit 
import PromiseKit 

func foo(_ error: Bool) -> Promise<String> { 
    return Promise { fulfill, reject in 
     if (!error) { 
      fulfill("foo") 
     } else { 
      reject(Error(domain:"", code:1, userInfo:nil)) 
     } 
    } 
} 

foo(true).then { response -> String in { 
     print(response) 
    } 
} 

不過,我得到以下錯誤:

error: MyPlayground.playground:11:40: error: cannot convert value of type '() ->()' to closure result type 'String' foo(true).then { response -> String in {

回答

0

被拋出的錯誤,因爲你傳遞給then封閉聲稱返回String,但沒有這樣的價值永遠不會返回。除非你打算在關閉返回String的地方,你需要關閉的返回類型更改爲Void,如下:

foo(true).then { response -> Void in 
    print(response) 
} 

注意與返回類型Void關閉可以有自己的返回類型省略。另外,你在代碼中有一個無關的{(我假設這在你的實際代碼中並不存在,因爲它編譯了)。

除了這個問題,Error沒有可訪問的初始化,在你使用你的代碼實際上屬於NSError初始化,因此你reject調用需要的樣子:

reject(NSError(domain:"", code:1, userInfo:nil)) 
+0

感謝您的回答。好像我沒有足夠理解承諾。如果響應 - >無效,這是否意味着履行(「富」)仍然會按預期工作 - 因爲我將有權訪問.fhen中的「foo」作爲響應? –

+0

是的。 ' - >'之後的類型只是說明了什麼,如果有的話,_you_從閉包中返回; 「響應」保持不變。 – aaplmath

+0

我也嘗試了操場上的修正,但它似乎沒有打印出「foo」。在右側,而是說「Promise:UnsealedState」? –

相關問題