J'ai une énumération avec des valeurs: Je veux mettre en œuvre les conditions suivantes: p> Quand j'essaie de faire le Toutes les choses en une seule ligne, comme ci-dessous indique une erreur: P> Argument de fermeture anonyme non contenue dans une fermeture p>
blockQuote> code est ci-dessous: p> Qu'est-ce que je fais mal ici? p> p>
4 Réponses :
Une solution consiste à effectuer l'outil Enum Mettre en œuvre alors vous pouvez vérifier la présence de la balise dans la matrice comme celle-ci p> < PRE> XXX PRE> Une autre option consiste à effectuer l'énum de type int p> , puis vérifiez directement à l'aide de la balise p> cédable code>
Le problème de la deuxième ligne est le type implicite que Swift Complier ne peut pas déterminer. En bref, Vous n'en avez pas besoin dans le premier exemple, car vous avez utilisé le type explicite: p> ([. A, .b, .c, .d] comme? [Types]) Code> Ne fait rien de bien, vous devez être explicite dans tous les types:
(types. A, types.b, types.c, types.d]) code>. Maintenant, Swift Compiler peut interpréter cela comme
[Types] code>.
if (([Types.A, Types.B, Types.C, Types.D]).map { tableViewDataSource.firstIndex(of: $0) }).contains(textField.tag) {
}
enum Types { case a, b, c, d }
Argument de fermeture anonyme non contenue dans une fermeture p>
Cette erreur se produit car vous ne pouvez pas utiliser la syntaxe des blocs de fuite dans la condition d'une instruction IF. Lorsque le compilateur voit le brace d'ouverture
{ code>, il suppose qu'il a trouvé le bloc à exécuter lorsque le
si code> condition est vrai.
0 $ 0 code> n'a aucun sens dans ce contexte. P>
Pour le réparer, vous devez utiliser la syntaxe de bloc non de fin, c'est-à-dire placer les parenthèses pour la carte code> appel de la carte code> in. p>
xxx pré> qui vous laissera avec cette erreur: p>
Type d'expression est ambigu sans plus de contexte P> BlockQuote>
C'est à cause du
comme? code>. En mettant la marque d'interrogation là-bas, vous indiquez au compilateur que vous n'êtes pas sûr que le tableau puisse être converti en un tableau de types
code> et cela suppose donc qu'il ne dispose pas de suffisamment d'informations pour en déduire le type. Sortez le point d'interrogation et le compilateur sait qu'il doit être un tableau de types
code> et peut donc déduire le type de l'expression correctement. P>
En fait, si vous en avez un Enum avec ces membres, vous pourriez vous trouver, vous n'avez peut-être pas besoin de la distribution: p>
xxx pré> compile et fonctionne bien dans un terrain de jeu. p> blockquote>
Soit index = pickerselectingfields.map ({tag in tableviedatasource.firstindex (de: tag)}). contient (textfield.tag)
Le code existant ne fonctionne pas aussi loin que je vois,
index code> contiendra toujours
0,1, ... code> et ainsi de suite en fonction du nombre d'éléments que vous avez dans
TableViewDataSource code> mais pas sur quels éléments vous avez donc
[. A, .b] code> et
[. B, .c] code> retourne tous les deux le même résultat
Vous voulez demander à tout le monde, c'est une bonne pratique de démarrer les noms de valeur avec une capitale?
La convention SWIFT commune est de démarrer les noms de valeur avec une lettre minuscule, de sorte que
énumbles {cas a, b, c, d} code>.