Construire un projet dans Xcode 11.4 beta 3, je reçois cette erreur du compilateur Swift sur une énumération:
Le cas enum a un seul tuple comme valeur associée, mais il y a plusieurs modèles ici, tupliquant implicitement les modèles et essayant de faire correspondre cela à la place
Code source:
switch result {
case .error(let err):
//
case .value(let staff, let locations): // <-- error on this line
//
}
Result
est une énumération générique avec des valeurs associées pour .error
et .value
. Dans ce cas, la valeur associée est un tupple.
public enum Result<T> {
case value(T)
case error(Error)
}
Je ne me souviens pas avoir vu cette erreur auparavant, et sa recherche n'a donné aucun résultat. Des idées?
Result
, je suis d'accord, c'est l'ancien code qui est antérieurSwift.Result
. Cela n'a cependant rien à voir avec le problème.Réponses:
J'ai trouvé que vous pouvez également réduire cette erreur en traitant la valeur associée plus comme un tuple en l'enveloppant dans un ensemble supplémentaire de crochets:
la source
let
sortie si vous voulez tout lier:case let .value( (staff, locations) ):
et lescase .value( let (staff, locations) ):
deux compilent. Choisissez votre préféré!Ok, compris. Il semble que
enum
les valeurs associées, où le type de valeur est un tupple, ne peuvent plus être mises en correspondance sur une instruction switch comme celle-ci:Solution
Les valeurs de tupple doivent être extraites manuellement dans Xcode 11.4 (Swift 5.2):
la source
Il s'agit d'un problème connu: https://developer.apple.com/documentation/xcode_release_notes/xcode_11_4_release_notes
Par exemple, la suppression des parenthèses lors de l'activation d'un Facultatif d'un type de tuple provoque une erreur de compilation:
}
Solution : ajoutez des parenthèses supplémentaires pour expliciter explicitement le modèle:
}
la source
Si vous le permettez, j'aimerais également ajouter une réponse pour la
if case
version.et puis bien sûr en ignorant la casse:
la source