J'essaye de déclarer un argument dans Swift qui prend une fermeture facultative. La fonction que j'ai déclarée ressemble à ceci:
class Promise {
func then(onFulfilled: ()->(), onReject: ()->()?){
if let callableRjector = onReject {
// do stuff!
}
}
}
Mais Swift se plaint que "la valeur liée dans un conditionnel doit être un type facultatif" où le "if let" est déclaré.
swift
optional-parameters
Marcosc
la source
la source
Réponses:
Vous devez mettre la fermeture facultative entre parenthèses. Cela permettra d'étendre correctement l'
?
opérateur.la source
()->Int?
signifie.?
c'est vraiment juste du sucre pourOptional<T>
, donc vous pouvez aussi écrire `func then (onFulfilled: () -> (), onReject: Optional <() -> ()>) {`alors vous n'auriez pas besoin de plus()
, bien que l'OMI()?
soit plus jolie. Vous pouvez également le rendre encore plus joli avec un typealias commetypealias RejectHandler = () -> ()
func then(onFulfilled: ()->(), onReject: RejectHandler?) {
Pour rendre le code encore plus court, nous pouvons utiliser
nil
comme valeur par défaut pour leonReject
paramètre et le chaînage facultatif?()
lors de son appel:De cette façon, nous pouvons omettre le
onReject
paramètre lorsque nous appelons lathen
fonction.Nous pouvons également utiliser la syntaxe de fermeture de fin pour passer le
onReject
paramètre enthen
fonction:Voici un article de blog à ce sujet.
la source
Puisque je suppose que cette fermeture "facultative" ne devrait simplement rien faire, vous pouvez utiliser un paramètre avec une fermeture vide comme valeur par défaut:
cette fonction peut maintenant être appelée avec ou sans le
onReject
callbackPas besoin de Swift génial
Optionals?
ici!la source
C'est peut-être une manière plus propre. Surtout lorsque la fermeture a des paramètres compliqués.
la source