Bonjour les codeurs je souhaite avoir une confirmation, j’utilise maintenant la nouvelle commande asynchrone async et await pour télécharger mes données de façon asynchrone.
swiftUI me dit, que je ne suis plus obligé d’avoir une variable @Published dans ce cas maintenant ?
« Publishing changes from background threads is not allowed; make sure to publish values from the main thread (via operators like receive(on:)) on model updates. »
PS Bien évidemment j’appelle ma fonction dans Task dans ma contentView
// télécharge les donner à la manière ios 15
.task {
await connexionAPIVille.startRequeteJSONDecoderBis()
}
import Foundation
import SwiftUI
class ConnexionAPI:ObservableObject {
@Published var listeVilles:[communes] = []
@Published var telechargementVille = false
//nouvelle méthode IOS 15 pour le téléchargement de donnée et les taches asynchrone
@available(iOS 15.0.0, *)
func startRequeteJSONDecoderBis() async {
// verification chaine de type url
guard let urlString = URL(string: "https://geo.api.gouv.fr/communes") else {return}
do {
// connexion url session
let (mesDonnees, _) = try await URLSession.shared.data(from: urlString)
listeVilles = try JSONDecoder().decode([communes].self, from: mesDonnees)
trierVilleNBHabitantsDesCroissant()
telechargementVille = true
} catch {
print(error.localizedDescription)
self.telechargementVille = false
}
}
//Trier element du tableau par ville par ordre alphabetique
func trierVilleOrdreAlpha() {
listeVilles.sort {$0.nom < $1.nom}
}
// trier les villes par nombre habitants descroissant
func trierVilleNBHabitantsDesCroissant() {
listeVilles.sort {$0.population ?? 0 > $1.population ?? 0}
}
}
Merci à vous