Énumérations avec méthodes
Fait partie de la section Programmation orientée objet du Journey Swift de Coddy. Leçon 15 sur 57.
Un enum définit un type avec un ensemble fixe de cas. Les valeurs s’écrivent avec un point, et switch doit gérer chaque cas ; ainsi, l’ajout ultérieur d’un cas indique tous les endroits à mettre à jour :
enum Direction {
case north, east, south, west
}
let heading = Direction.east
switch heading {
case .north: print("up")
case .east: print("right")
case .south: print("down")
case .west: print("left")
}Sortie :
rightLes énumérations peuvent avoir des méthodes et des propriétés calculées. À l’intérieur de celles-ci, self désigne le cas courant :
enum Direction {
case north, east, south, west
var turnedRight: Direction {
switch self {
case .north: return .east
case .east: return .south
case .south: return .west
case .west: return .north
}
}
}
print(Direction.north.turnedRight)
print(Direction.west.turnedRight.turnedRight)Résultat :
east
eastUne valeur brute associe une valeur fixe d’un type à chaque cas. init(rawValue:) fait l’inverse et renvoie nil lorsqu’aucun cas ne correspond :
enum Size: String {
case small = "S", medium = "M", large = "L"
}
print(Size.medium.rawValue)
print(Size(rawValue: "L") == .large)
print(Size(rawValue: "XL") == nil)Sortie :
M
true
trueLes valeurs associées permettent à chaque cas de contenir ses propres données, ce qui permet à un même type de contenir des valeurs de formes différentes. switch lie les données avec let :
enum Payment {
case cash(amount: Int)
case card(number: String, amount: Int)
var amount: Int {
switch self {
case .cash(let amount): return amount
case .card(_, let amount): return amount
}
}
}
let payments: [Payment] = [.cash(amount: 20), .card(number: "4242", amount: 55)]
print(payments.map { $0.amount })Sortie :
[20, 55]Défi
FacileComplétez l’énumération Command avec les cas forward, back, left et right, associés aux valeurs brutes F, B, L et R. Ajoutez une propriété calculée step qui renvoie la variation de la position : forward 1, back -1, left et right 0. Complétez ensuite run(_:), qui transforme chaque caractère en commande avec init(rawValue:) (en ignorant les caractères inconnus) et renvoie position 2, turns 1, skipped 1.
Le code fourni lit une ligne de lettres de commande et affiche le résultat de run(_:).
Votre code doit se trouver dans Command.swift et Functions.swift. main.swift contient le code d’entrée/sortie fourni et ne peut pas être modifié.
Essayez vous-même
// Code d'entrée/sortie fourni : le garder tel quel
var input: [String] = []
while let line = readLine() { input.append(line) }
print(run(input[0]))
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Programmation orientée objet
1Classes et objets
Travailler avec des fichiersDéfinir des classesMéthodes et selfInitialiseursLes classes sont des référencesRécapitulatif - Carte de bibliothèque4Encapsulation
Contrôle d’accèsLecture seule depuis l’extérieurProtection de l’étatInitialiseurs pouvant échouerRécapitulatif - Compte bancaire7Polymorphisme et génériques
PolymorphismeConversion de typeFonctions génériquesTypes génériquesRécapitulatif - Calculateur de formes2Structures et types valeur
StructuresSémantique de valeurMéthodes mutantesStructure ou classeRécapitulatif - article d’inventaire5Héritage
Sous-classesRedéfinition des méthodesInitialiseurs et superfinal et hiérarchiesRécapitulatif - hiérarchie des employés8Protocoles standard
CustomStringConvertibleEquatableComparableHashableRécapitulatif - Tri personnalisé11Projet : Gestion de bibliothèque
Livres et membresEmprunter des livres3Les propriétés en profondeur
Propriétés calculéesObservateurs de propriétésMembres statiquesÉnumérations avec méthodesRécapitulatif - Journal des températuresEntraînez-vous par vous-même : Playground Swift