Comment énumérer une énumération avec le type String?

Lucien:
enum Suit: String {
    case spades = "♠"
    case hearts = "♥"
    case diamonds = "♦"
    case clubs = "♣"
}

Par exemple, comment puis-je faire quelque chose comme:

for suit in Suit {
    // do something with suit
    print(suit.rawValue)
}

Exemple résultant:

♠
♥
♦
♣
Cœur :

Swift 4.2+

À partir de Swift 4.2 (avec Xcode 10), ajoutez simplement la conformité du protocole pour CaseIterableen bénéficier allCases. Pour ajouter cette conformité de protocole, il vous suffit d'écrire quelque part:

extension Suit: CaseIterable {}

Si l'énumération est la vôtre, vous pouvez spécifier la conformité directement dans la déclaration:

enum Suit: String, CaseIterable { case spades = "♠"; case hearts = "♥"; case diamonds = "♦"; case clubs = "♣" }

Ensuite, le code suivant imprimera toutes les valeurs possibles:

Suit.allCases.forEach {
    print($0.rawValue)
}

Compatibilité avec les versions antérieures de Swift (3.x et 4.x)

Si vous devez prendre en charge Swift 3.x ou 4.0, vous pouvez imiter l'implémentation de Swift 4.2 en ajoutant le code suivant:

#if !swift(>=4.2)
public protocol CaseIterable {
    associatedtype AllCases: Collection where AllCases.Element == Self
    static var allCases: AllCases { get }
}
extension CaseIterable where Self: Hashable {
    static var allCases: [Self] {
        return [Self](AnySequence { () -> AnyIterator<Self> in
            var raw = 0
            var first: Self?
            return AnyIterator {
                let current = withUnsafeBytes(of: &raw) { $0.load(as: Self.self) }
                if raw == 0 {
                    first = current
                } else if current == first {
                    return nil
                }
                raw += 1
                return current
            }
        })
    }
}
#endif

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

Comment spécialiser le type de retour d'une fonction avec une énumération en C ++?

Comment énumérer une énumération

Renvoie le type de variable avec une énumération c ++

Comment obtenir le type prenant en charge une énumération

Comment spécifier le type de représentation pour une énumération dans Rust pour s'interfacer avec C ++?

Comment utiliser le protocole Codable pour une énumération avec une autre énumération comme valeur associée (énumération imbriquée)

Comment attribuer une valeur à une énumération dans le constructeur avec une valeur par défaut?

Définir une énumération avec une variable de type List <String>

Swift: comment définir une propriété avec une énumération à l'aide de String

Comment construire une énumération avec un type personnalisé à l'aide de JavaPoet

Comment comparer une chaîne avec une énumération python?

Itérer sur une énumération avec dactylographié et attribuer à une énumération

Comment faire une énumération Typescript avec des interfaces implements

Comment mapper une énumération PostgreSQL avec JPA et Hibernate

Comment afficher une valeur d'énumération avec Thymeleaf

Comment affecter rawValue d'énumération à une variable avec ObjectMapper?

Comment puis-je lier une énumération avec IValueConverter ?

Quel est le type TypeScript d'une énumération

Quel est le type d'une énumération dans Typescript?

Écrire une énumération avec String sur parcelle

Comment itérer avec l'énumération en utilisant la rayonne?

Comment comparer une énumération sans correspondance de modèle

Comment appliquer le balisage Serilog à une énumération

Problème avec une variable statique pour énumérer une énumération dans Swift

Comment initialiser l'énumération générique à l'aide d'un protocole avec le type associé ?

Comment générer des valeurs d'énumération au moment de la compilation avec une fonction macro en c #?

comment énumérer avec une valeur personnalisée en Java ?

Comment puis-je supprimer un enregistrement en double de la liste et le marquer avec une énumération?

Comment restreindre le type de propriété d'interface au sous-ensemble d'une énumération déclarée?

TOP liste

  1. 1

    comment supprimer "compte de connexion google" à des fins de développement - actions sur google

  2. 2

    J'ai besoin de savoir si ces deux phrases sont les mêmes en programmation

  3. 3

    Microsoft.WebApplication.targets

  4. 4

    Création d'un nouvel objet d'une classe avec un nouveau nom en cliquant sur un bouton dans java swing

  5. 5

    La taille de la forme n'est pas égale à la taille de la cellule du tableau et ajuste le texte à l'intérieur de la forme

  6. 6

    Javascript indiquant "impossible de définir la propriété 'innerHTML' sur null"

  7. 7

    Pourquoi utiliser Asyncio ne réduit pas le temps d'exécution global en Python et n'exécute pas les fonctions simultanément?

  8. 8

    Création d'un rappel python pour une fonction C à partir d'une DLL avec un tampon char.

  9. 9

    Trouver l'intersection et l'union de deux rectangles

  10. 10

    Comment convertir une chaîne en tuple en utilisant `reads`?

  11. 11

    Empêcher l'allocation de mémoire dans la génération de combinaison récursive

  12. 12

    Restauration de la sauvegarde de la base de données SQL Server sur la version inférieure

  13. 13

    Nextcloud avec Docker: impossible de créer ou d'écrire dans le répertoire de données

  14. 14

    Compter combien de fois un nombre apparaît dans un tableau aléatoire

  15. 15

    java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver

  16. 16

    java.lang.NoClassDefFoundError: org / springframework / data / repository / config / BootstrapMode

  17. 17

    Créer un graphique à barres avec une fréquence relative / à partir d'un objet de table dans R

  18. 18

    comment le contrôle de tableau javascript devrait-il être

  19. 19

    Importation bizarre de Google Sheets importxml - Impossible d'obtenir le chemin correct vers les éléments

  20. 20

    Injecter des éléments dans une liste existante au printemps

  21. 21

    Placez le modeBar en haut au centre à l'aide de plotly.js

chaudétiquette

Archive