Dans cette partie nous allons améliorer notre modèle et le rendre bien plus flexible et utile.
Créez un nouveau fichier LootItem.swift et ajoutez-y une structure LootItem qui contient les propriétés suivantes :
quantity : Int (avec une valeur par défaut à 1)name : Stringtype : ItemTyperarity : RarityattackStrength : Int?game : Game
🧑🚀 Si vous voulez ajouter d’autres propriétés, n’hésitez pas, c’est votre modèle, faites en ce que vous voulez.
Pour vous inspirez quelques UI de jeux vidéos afin de voir les stats des équipements -> https://interfaceingame.com/
Cet enum contiendra les types suivants avec une image d’illustration sous forme d’émoji :
magic : ⭐️fire : 🔥ice : ❄️wind : 💨poison : ☠️thunder : ⚡️dagger : 🗡️shield : 🛡️bow : 🏹ring : 💍unknown : 🎲Votre enum doit contenir l’émoji associé à chaque type.
Cet enum existe déjà pour vous, mais améliorez le pour obtenir une Color associée à chaque cas.
🛟 Pour vous aider reprenez l’exercice sur les
enum.
Je vous fourni la structure Game, pensez à créer un fichier Game.swift pour la contenir.
enum GameGenre {
case mmorpg, rpg, looter, fps, tps, strategy, unset
}
struct Game: Identifiable, Hashable {
let name: String
let id: UUID = UUID()
let genre: GameGenre
let coverName : String?
static var emptyGame = Game(name: "", genre: .unset, coverName: nil)
}
// Hesitez pas mettre vos propres jeux dans la liste
let availableGames = [
Game(name: "Elden Ring", genre: .rpg, coverName: nil),
Game(name: "Skyrim", genre: .rpg, coverName: nil),
Game(name: "WoW", genre: .mmorpg, coverName: nil),
Game(name: "CS:GO", genre: .fps, coverName: nil),
Game(name: "Diablo IV", genre: .looter, coverName: nil)
]
💡 Créez une liste d’item en dur pour votre inventaire, pour vos tests, et éviter de devoir ajouter des items à chaque fois.
- Utilisez ChatGPT ou faites le à la main.
- Quand vous lancez l’app, vous devriez avoir une liste d’items dans votre inventaire.
assets XCode et changer le nom coverName dans la liste availableGames en fonctionIdentifiable ? Comment la corriger ? Ajouter un id de type UUID à votre structure en le conformant à Identifiable.AddItemView.Voici un exemple de vue qui inclut nos changements :

AddItemView) pour refléter les changements de votre modèle.Votre vue doit inclure au minimum les champs de formulaire suivant

Utilisez les vues SwiftUI suivantes :
| Vue | Description | Champs |
|---|---|---|
TextField | Un champ de texte | name |
Picker | Un picker pour choisir le type d’item. Avec le style PalettePickerStyle() | type |
Picker | Un picker pour choisir la rareté de l’item | rarity |
Stepper | Un stepper pour choisir la quantité d’item | quantity |
Toggle | Un toggle pour choisir si l’item possède une stat d’attaque ou non (voir le gif suivant) | ? |
Stepper | Un stepper pour choisir la valeur de la stat d’attaque (voir le gif suivant) | attackStrength |
Picker | Un picker pour choisir le jeu auquel appartient l’item, avec une valeur par défaut à .emptyGame | game |
🛟 Vous aurez besoin d’utiliser
.tag()pour les valeurs de certains picker. Il faudra savoir expliquer pourquoi.

Faites en sorte que tout fonctionne et que l’ajout d’un item fonctionne, l’item doit être ajouté à la liste et s’afficher dans la vue principale.
🎉 Tout fonctionne ? Bravo, vous maitrisez un peu plus l’art du @Binding et de la gestion d’état avec SwiftUI.