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:
♠
♥
♦
♣
À partir de Swift 4.2 (avec Xcode 10), ajoutez simplement la conformité du protocole pour CaseIterable
en 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)
}
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.
laisse moi dire quelques mots