0
votes

Xcode montrant des erreurs de syntaxe indésirables

J'ai une énumération avec des valeurs: xxx

Je veux mettre en œuvre les conditions suivantes: xxx

Quand j'essaie de faire le Toutes les choses en une seule ligne, comme ci-dessous indique une erreur:

Argument de fermeture anonyme non contenue dans une fermeture

code est ci-dessous: xxx

Qu'est-ce que je fais mal ici?


4 commentaires

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 contiendra toujours 0,1, ... et ainsi de suite en fonction du nombre d'éléments que vous avez dans TableViewDataSource mais pas sur quels éléments vous avez donc [. A, .b] et [. B, .c] 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} .


4 Réponses :


1
votes

Une solution consiste à effectuer l'outil Enum Mettre en œuvre cédable xxx

alors vous pouvez vérifier la présence de la balise dans la matrice comme celle-ci < PRE> XXX

Une autre option consiste à effectuer l'énum de type int xxx

, puis vérifiez directement à l'aide de la balise xxx


0 commentaires

1
votes

Le problème de la deuxième ligne est le type implicite que Swift Complier ne peut pas déterminer. En bref, ([. 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>.

Vous n'en avez pas besoin dans le premier exemple, car vous avez utilisé le type explicite: p>

if (([Types.A, Types.B, Types.C, Types.D]).map { tableViewDataSource.firstIndex(of: $0) }).contains(textField.tag) {

}


0 commentaires

2
votes
enum Types {
    case a, b, c, d
}

0 commentaires

0
votes

Argument de fermeture anonyme non contenue dans une fermeture

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 {, il suppose qu'il a trouvé le bloc à exécuter lorsque le si condition est vrai. 0 $ 0 n'a aucun sens dans ce contexte.

Pour le réparer, vous devez utiliser la syntaxe de bloc non de fin, c'est-à-dire placer les parenthèses pour la carte appel de la carte in. xxx

qui vous laissera avec cette erreur:

Type d'expression est ambigu sans plus de contexte

C'est à cause du comme? . 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 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 et peut donc déduire le type de l'expression correctement.

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: xxx

compile et fonctionne bien dans un terrain de jeu.


0 commentaires