Lorsque l'application doit travailler avec des données, par exemple les items d'un catalogue, il est intéressant de créer un modèle pour définir ces données.
Le modèle représente la structure des données, un peu comme une table avec ses champs dans une base de données.
Dans le cas où l'application doit enregistrer les données dans une base de données locale ou distante, le modèle sera central dans le processus.
Le modèle peut être défini à différents endroits et porter n'importe quel nom mais pour mieux nous y retrouver, nous allons standardiser la nomemclature.
Dans un dossier nommé Models, chaque modèle sera défini dans un fichier dont le nom est en CassePascal et au singulier (ex : Item).
Pour créer le fichier du modèle, faites un clic droit sur le dossier Models, que vous aurez ajouté à la racine du projet, puis choisissez .
La hiérarchie des fichiers ressemblera à ceci.
Dans le fichier du modèle, les données seront définies dans une structure ou dans une classe. L'utilisation d'une structure est généralement plus simple mais l'utilisation d'une classe est requise si vous désirez enregistrer vos données à l'aide de SwiftData.
Le nom de la structure ou de la classe sera identique au nom du fichier.
Ceci n'est pas obligatoire mais si vous croyez que les instances d'un modèle pourraient être utilisées dans des listes (List), la structure ou la classe devra idéalement répondre au protocole Identifiable.
Pour répondre à ce protocole, il devra avoir une propriété nommée id dont la valeur définit chaque instance de façon unique.
struct Item: Identifiable {
var id: Int
var code: String
var titre: String
// les structures ont un constructeur par défaut
}
class Item: Identifiable {
var id: Int
var code: String
var titre: String
// le constructeur est requis dans une classe
init(id: Int = 0, code: String = "", titre: String = "") {
self.id = id
self.code = code
self.titre = titre
}
}
Il est possible d'imbriquer des modèles. Par exemple, on pourrait avoir un modèle Panier dont une des propriété est de type Item.
Note : si le modèle utilise autre chose que des types primitifs, vous pourriez avoir un import à ajouter.
import SwiftUICore
struct Carte: Identifiable {
var id: Int
var couleur: Color
var titre: String
...
}
Pour créer une instance du modèle, on procédera comme suit :
let item = Item(id: 1, code: "abc", titre: "Une table")
Selon les besoins de l'application, on pourait avoir un tableau de modèles.
let items: [Item] = [
Item(id: 1, code: "abc", titre: "Une table"),
Item(id: 2, code: "def", titre: "Une chaise"),
Item(id: 3, code: "ghi", titre: "Un lit")
]
Le tableau pourrait également être rempli au moment opportun.
var items: [Item] = []
...
items.append(Item(
id: 1,
code: "abc",
titre: "Une table"
))
▼Publicité