Je suis nouveau dans les promesses de Swift et j'utilise PromiseKit pour essayer de créer une réponse très simple dans une aire de jeux et tenter de l'utiliser. J'ai le code suivant:
//: 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)
}
}
Cependant, j'obtiens l'erreur suivante:
error: MyPlayground.playground:11:40: error: cannot convert value of type '() -> ()' to closure result type 'String' foo(true).then { response -> String in {
L'erreur est levée car la fermeture que vous passez à then
prétend renvoyer un String
, mais aucune valeur de ce type n'est jamais retournée. Sauf si vous prévoyez de renvoyer un String
quelque part dans cette fermeture, vous devez modifier le type de retour de la fermeture en Void
, comme suit:
foo(true).then { response -> Void in
print(response)
}
Notez que les fermetures avec le type de retour Void
peuvent avoir leur type de retour omis. En outre, vous avez un {
Superflu dans le code de votre question (je suppose que cela n'existe pas dans votre code réel, car il se compile).
En plus de ce problème, Error
n'a pas d'initialiseurs accessibles - l'initialiseur que vous utilisez dans votre code appartient en fait à NSError
, et donc votre appel reject
doit ressembler à :
reject(NSError(domain:"", code:1, userInfo:nil))