Rentrons dans le dur, nous allons maintenant faire appel à une API pour récupérer des objets JSON, puis les transformer afin de les exploiter dans notre application.
JSON signifie JavaScript Object Notation. C’est un format de données très utilisé pour échanger des données entre un serveur et un client. Et comme son nom l’indique, il est très proche de la syntaxe JavaScript, ce qui le rend très facile à lire et à écrire avec du Javascript.
Sauf que nous sommes en Swift, et que nous avons besoin de transformer ce JSON en objet Swift pour pouvoir l’utiliser dans notre application. On appel ces opérations de la négociation de contenu, car on négocie le format de données avec le serveur.

Nous allons donc avoir besoin de deux choses :
JSON.stringify)JSON.parse)Puis que Javascript n’est pas un langage fortement typé, il n’y a pas besoin de spécifier le type de données que l’on veut récupérer, c’est donc simple et rapide, mais cela peut poser des problèmes de sécurité et de fiabilité.
Pourquoi c’est important ?
En Swift, nous avons besoin de spécifier le type de données que l’on veut récupérer, ce qui est plus long, mais plus sûr et plus fiable.
🤔 Comment faire cela en Swift ? Et bien c’est très simple, il suffit d’utiliser le protocole Codable qui permet de transformer un objet Swift en JSON et inversement.
Sortons de notre sujet quelques minutes, créez un fichier de test dans votre projet pour notre experimentation
Créez dans ce fichier une structure Movie qui représente un film, avec les propriétés suivantes :
struct Movie: Codable {
let title: String
let releaseYear: Int
let genre: String
}
Puis copiez/collez le code suivant dans votre fichier de test :
let jsonString = """
[
{
"title": "Inception",
"releaseYear": 2010,
"genre": "Sci-Fi"
},
{
"title": "The Dark Knight",
"releaseYear": 2008,
"genre": "Action"
}
]
"""
Enfin utilisez le code suivant pour transformer votre JSON en objet Swift :
if let jsonData = jsonString.data(using: .utf8) {
do {
let movies = try JSONDecoder().decode([Movie].self, from: jsonData)
// Ici, vous avez un tableau de films que vous pouvez utiliser.
for movie in movies {
print("Film: \(movie.title), Année de sortie: \(movie.releaseYear), Genre: \(movie.genre)")
}
} catch {
print("Erreur de décodage: \(error)")
}
}
Director, il doit contenir un nom et un prénom et doit être décodé également.Pour afficher la page d’accueil de l’application nous ferons appel à la route suivante :
https://api.unsplash.com/photos
Attention
Cette route nécessite une authentification, vous devez donc ajouter votre clé d’API en tant que queryParameter dans votre requête.
Lancez la requête dans votre client HTTP favori (Postman, Insomnia, etc.) et regardez la réponse.
Comme vous le voyez, la réponse est un tableau d’objets JSON, qui représentent chacun une image. Et pour notre application nous avons besoin d’une partie de ces informations, nous n’avons pas besoin de créer un miroir parfaire des objets json en objet Swift.
QuickType pour générer un objet Swift à partir de votre JSON simplifié.Nommez vos objets comme vous le souhaitez, mais faites en sorte que votre objet principal respecte le protocole
Identifiablepour pouvoir l’utiliser dans unForEach.
Pour notre Grille nous aurons surement besoin des informations suivantes à minima
String, n’essayez pas de transformer l’URL en URL pour le moment)IdentifiableVous devrez remplir un enum CodingKeys pour que le décodage fonctionne correctement.
A la fin de cette étape vous devriez avoir un objet Swift qui ressemble à cela :
struct UnsplashPhoto: Codable, Identifiable {
let id: String
let slug: String
let author: User
let url: UnsplashImageUrls
}
struct User: Codable {
let name: String
}
struct UnsplashPhotoUrls: Codable {
let raw: String
let full: String
let regular: String
let small: String
let thumb: String
}
(Optionnel) Vous pouvez tenter d’utilisez votre playground pour vérifier que votre décodage fonctionne correctement.