Je veux mettre rapidement 3 do-catch
dans une fonction plutôt que de l'écrire constamment partout où j'en ai besoin; à l'intérieur de cette fonction, je souhaite retourner un tuple
avec un booléen, et une erreur facultative.Swift Comment retourner un tuple à partir d'un do où la liaison conditionnelle doit avoir un type optionnel?
Je suis en train de retourner un tuple de la fonction et de gérer le résultat dans mon XCTest
Cependant, je reçois une erreur disant:
Initializer pour condition de liaison doit être de type en option, non ' (Bool, Error?) '(Alias' (Bool, Facultatif) ')
Ma fonction est la suivante;
public static func isValidPurchase(train: Train, player: Player) -> (Bool, Error?) {
do {
let result = try train.canBePurchased(by: player)
return (result, nil)
} catch let error {
return (false, error)
}
}
Mon code canBePurchased
est un peu long, mais il va comme ceci:
func canBePurchased(by player: Player) throws -> Bool {
if (!self.isUnlocked) {
throw ErrorCode.trainIsNotUnlocked(train: self)
}
// other if-statements and throws go here
}
Et dans mon XCTest je l'appelle en tant que tel:
if let result = TrainAPI.isValidPurchase(train: firstTrain, player: firstPlayer) as! (Bool, Error?) {
}
J'ai essayé de Forcer la distribution:
if let result: (Bool, Error?) ...
mais cela ne rétrograde l'erreur de compilation à un avertissement.
Le module complémentaire affiche l'erreur comme indiqué ci-dessus.
Qu'est-ce que je fais mal en termes de Initializer for conditional binding must have Optional type
et comment l'éviter?
Merci
Compris. Je vais faire le changement et merci pour l'aide – zardon