Bonjour tout le monde ! 

Aujourd'hui, nous allons plonger dans l'une des mises à jour les plus importantes présentées lors de la WWDC 2024 : SwiftData. SwiftData est un nouveau framework d'iOS 17 qui permet aux développeurs de modéliser et de conserver les données de leurs applications de manière efficace et sécurisée. J'ai donc décidé d'explorer un peu plus les fonctionnalités de SwiftData, et je vais tout vous expliquer de manière aussi simple que possible.

La seule façon de faire du bon travail est d'aimer ce que vous faites.

– Steve Jobs

 

Qu'est-ce que SwiftData?

SwiftData est comme une boîte magique qui nous aide à sauvegarder et organiser les informations dans nos applications. Imaginez que vous ayez un carnet où vous notez toutes vos choses préférées. SwiftData est comme ce carnet, mais sur votre iPhone ou iPad, et il peut faire bien plus que simplement stocker des notes.

Coder une simple application avec SwiftData

Disons que nous voulons créer une application appelée "Voyages" où nous consignons toutes nos idées de vacances. Nous utiliserons SwiftData pour enregistrer les informations sur chaque voyage. Voici un guide simple pour le réaliser.

Etape 1: créer le model "Trip"

Tout d'abord, nous devons créer un modèle pour représenter notre voyage. Un modèle est comme un plan pour les informations que nous voulons sauvegarder. Dans notre cas, chaque voyage a un nom, une destination, une date de début et une date de fin. Voici le code :

<br>
import Foundation<br>
import SwiftData<p></p>
<p>@Model<br>
class TripModel {<br>
    var name: String<br>
    var destination: String<br>
    var startDate: Date<br>
    var endDate: Date</p>
<p>    init(name: String, destination: String, startDate: Date, endDate: Date) {<br>
        self.name = name<br>
        self.destination = destination<br>
        self.startDate = startDate<br>
        self.endDate = endDate<br>
    }<br>
}</p>
<p>@Model<br>
class BucketListItem {<br>
    var name: String<br>
    var isInPlan: Bool</p>
<p>    init(name: String, isInPlan: Bool) {<br>
        self.name = name<br>
        self.isInPlan = isInPlan<br>
    }<br>
}</p>
<p>@Model<br>
class LivingAccommodation {<br>
    var type: String<br>
    var address: String</p>
<p>    init(type: String, address: String) {<br>
        self.type = type<br>
        self.address = address<br>
    }<br>
}<br>

Etape 2: Configurer le Model Container

Le conteneur de modèle est comme une boîte qui contient tous nos modèles (dans ce cas, les voyages). Nous disons à notre application d'utiliser cette boîte pour savoir où chercher les informations.

<br>
import SwiftUI<br>
import SwiftData</p>
<p>@main<br>
struct TripsApp: App {<br>
    var container: ModelContainer = {<br>
        do {<br>
            let configuration = ModelConfiguration(schema: Schema([TripModel.self]))<br>
            return try ModelContainer(for: TripModel.self, configurations: configuration)<br>
        } catch {<br>
            fatalError("Failed to initialize model container: \(error)")<br>
        }<br>
    }()</p>
<p>    var body: some Scene {<br>
        WindowGroup {<br>
            ContentView()<br>
                .modelContainer(container)<br>
        }<br>
    }<br>
}<br>

 

Etape 3: Afficher les Voyages 

La ContentView est la vue principale qui liste tous les voyages et inclut une fonctionnalité de recherche.

<br>
import SwiftUI<br>
import SwiftData</p>
<p>struct ContentView: View {<br>
    @State private var trips: [TripModel] = []<br>
    @State private var searchText = ""</p>
<p>    var body: some View {<br>
        NavigationView {<br>
            List {<br>
                ForEach(trips.filter {<br>
                    searchText.isEmpty || $0.name.localizedStandardContains(searchText) || $0.destination.localizedStandardContains(searchText)<br>
                }, id: \.self) { trip in<br>
                    NavigationLink(destination: TripDetail(trip: trip)) {<br>
                        Text(trip.name)<br>
                    }<br>
                }<br>
            }<br>
            .searchable(text: $searchText)<br>
            .navigationTitle("Trips")<br>
        }<br>
        .onAppear {<br>
            // Simulate fetching trips (replace with actual data fetching logic)<br>
            fetchTrips()<br>
        }<br>
    }</p>
<p>    private func fetchTrips() {<br>
        // Simulated data fetching<br>
        trips = [<br>
            TripModel(name: "Trip to Paris", destination: "Paris", startDate: Date(), endDate: Date()),<br>
            TripModel(name: "Beach Vacation", destination: "Maldives", startDate: Date(), endDate: Date()),<br>
            TripModel(name: "Skiing in Alps", destination: "Switzerland", startDate: Date(), endDate: Date())<br>
        ]<br>
    }<br>
}<br>

 

Etape 4: Créer la vue correspondant aux détails du voyage

La vue TripDetail montre les informations détaillées sur un voyage sélectionné. La structure TripDetail affiche les détails d'un voyage sélectionné. La méthode formattedDate formatte la date en une chaîne lisible.

<br>
import SwiftUI</p>
<p>struct TripDetail: View {<br>
    var trip: TripModel</p>
<p>    var body: some View {<br>
        VStack {<br>
            Text("Trip: \(trip.name)")<br>
                .font(.title)<br>
            Text("Destination: \(trip.destination)")<br>
            Text("Start Date: \(formattedDate(trip.startDate))")<br>
            Text("End Date: \(formattedDate(trip.endDate))")<br>
        }<br>
        .navigationTitle(trip.name)<br>
    }</p>
<p>    private func formattedDate(_ date: Date) -&gt; String {<br>
        let formatter = DateFormatter()<br>
        formatter.dateStyle = .medium<br>
        return formatter.string(from: date)<br>
    }<br>
}<br>

 
Conclusion

En suivant ces étapes, vous avez créé une mini application SwiftUI utilisant SwiftData pour gérer et afficher les informations sur les voyages.

et donc quel serait l'utilité de SwiftData pour finir?

SwiftData se distingue de Core Data par sa simplicité et son intégration transparente avec SwiftUI. Contrairement à Core Data, principalement conçu pour gérer les données locales au sein de l'application, SwiftData offre une flexibilité accrue pour interagir avec des API externes. Cela facilite la synchronisation des données locales avec des services web, améliorant ainsi l'expérience utilisateur.

SwiftData simplifie également le développement en réduisant le code et en offrant une meilleure sécurité des types. En résumé, SwiftData permet de créer des applications plus robustes, performantes et maintenables tout en facilitant l'intégration avec les services en ligne, ce qui n'est pas aussi facilement réalisable avec Core Data.

Fonctionnalité SwiftData Core Data
Age Plus récent Moins récent
API Plus moderne et user-friendly Plus compliqué et orienté Objective-C
Efficacité Plus efficace Moins efficace
Intégration avec SwiftUI Transparent Moins transparente
Fonctionnalité Peu de fonctionnalités liées Plus de fonctionnalités disponibles
Maturité Peu mature Plus mature

 

 

Tags: