Application iOS de suivi de lectures avec système de notation, avis et gestion de bibliothèque, développée avec SwiftUI et SwiftData.
- 📖 Ajout de livres avec titre, auteur, genre et avis
- ⭐ Système de notation 1-5 étoiles interactif
- 😊 Notation emoji dynamique selon la note
- 🔤 Tri multi-critères (titre, auteur)
- 🔴 Indicateur visuel pour les livres mal notés (rating 1 = rouge)
- 📅 Date d'ajout enregistrée automatiquement
- 🗑️ Suppression avec confirmation (alerte)
- ✏️ Mode édition avec EditButton
- 💾 Persistance automatique avec SwiftData
- ✅ Validation des champs (titre et auteur requis)
| Technologie | Utilisation |
|---|---|
| Swift | Langage de programmation |
| SwiftUI | Framework UI déclaratif |
| SwiftData | Persistance et modélisation des données |
@Query |
Requêtes automatiques avec tri |
Bookworm/
├── Book.swift # @Model SwiftData (titre, auteur, genre, review, rating, date)
├── ContentView.swift # Liste des livres avec @Query, tri, navigation
├── AddBookView.swift # Formulaire d'ajout avec validation
├── BookDetailsView.swift # Vue détail avec image genre, review, suppression
├── RatingView.swift # Composant étoiles réutilisable (@Binding)
└── EmojiRatingView.swift # Emoji dynamique selon la note
┌─────────────────────────────────────────────────────┐
│ Book (@Model) │
│ → title, author, genre, review, rating, date │
│ → Persisté automatiquement par SwiftData │
└─────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ ContentView │
│ → @Query avec SortDescriptor multi-critères │
│ → NavigationStack + .navigationDestination │
│ → EditButton + onDelete │
└─────────────────────────────────────────────────────┘
│ │
▼ ▼
┌──────────────────────┐ ┌───────────────────────────┐
│ AddBookView │ │ BookDetailsView │
│ → Formulaire + Form │ │ → Image genre │
│ → Validation champs │ │ → Review + RatingView │
│ → modelContext │ │ → Suppression avec alert │
│ .insert() │ │ → modelContext.delete() │
└──────────────────────┘ └───────────────────────────┘
| Concept | Utilisation |
|---|---|
@Model |
Modèle de données SwiftData |
@Query + SortDescriptor |
Requête automatique avec tri multi-critères |
@Environment(\.modelContext) |
Insertion et suppression de données |
@Binding |
RatingView reçoit et modifie le rating du parent |
.constant() |
Binding en lecture seule dans BookDetailsView |
.navigationDestination(for:) |
Navigation type-safe vers BookDetailsView |
.sheet |
Modal pour AddBookView |
.alert |
Confirmation avant suppression |
EditButton |
Mode édition natif pour la liste |
.scrollBounceBehavior |
Désactive le scroll inutile |
ModelConfiguration(isStoredInMemoryOnly:) |
Container in-memory pour les Previews |
Composant réutilisable avec étoiles interactives :
- Configurable : label, nombre max d'étoiles, images on/off, couleurs
- Utilise
@Bindingpour la communication bidirectionnelle .buttonStyle(.plain)pour un tap précis dans les listes
git clone https://github.com/guitch95/Bookworm.git
cd Bookworm
open Bookworm.xcodeproj- Recherche par titre ou auteur
- Filtrage par genre
- Tri dynamique (comme iExpense)
- Statistiques de lecture (Charts)
- Import/export de la bibliothèque
Guillaume Richard
