私はSwiftでのPromiseを初めて使用し、PromiseKitを使用してプレイグラウンドで非常に単純な応答を作成して使用しようとします。次のコードがあります。
_//: 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 {
then
に渡すクロージャーがString
を返すと主張しているが、そのような値が返されないため、エラーがスローされます。そのクロージャーのどこかにString
を返す予定がない限り、次のようにクロージャーの戻り値の型をVoid
に変更する必要があります。
foo(true).then { response -> Void in
print(response)
}
戻り値の型がVoid
のクロージャーは、戻り値の型を省略できることに注意してください。また、無関係な{
あなたの質問のコード内(コンパイルされているため、これは実際のコードには存在しないと思います)。
その問題に加えて、Error
にはアクセス可能な初期化子がありません。コードで使用している初期化子は実際にはNSError
に属しているため、reject
呼び出しは次のようにする必要があります:
reject(NSError(domain:"", code:1, userInfo:nil))