Question nouvelle fonction asynchrone (Xcode version 13)

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

Bonjour,
Je n’ai pas encore pratiqué le code asynchrone, mais ton pb me rappelle quelque chose que j’ai vu dans une des vidéos de Maxime, qui concerne le fait que tu ne peux pas modifier des données utilisées dans la vue quand tu n’es pas sur le thread principal. Et là je pense que c’est ce qu’il se passe ici.
Tu devrais regarder les vidéos sur les nouveautés ios15 async/await.
Bon courage
Pascal

Je précise que le code fonctionne dans les deux cas si je laisse les @Published j’ai des messages d’information en violet à coté des variables

« 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. »

Sur un vrai iphone si je retire les Publishing je comme l’impression que la contentView ne change pas ma variable telechargementVille à true. et donc reste indéfiniment à attendre les données. et la liste ne s’affiche jamais.