Bonjour, je me suis crée mon premier petit exemple d’une connexion, à une api en swift UI
télécharger sur gitHub
Pour le moment l’exemple reste incomplet, c’est-à-dire que la connexion et la création de la liste se font bien, à partir de l’URL, il faut que je trouve comment passer des données de la contentView vers la vue DétailUtilisateurs dans la navigationLink.
Mais déjà l’exemple peut aider.
il ne me semble pas avoir vu ce sujet traité dans le cours de @mbritto. donc tout aide est la bien venue
’’’
import Foundation
class APIRequete:ObservableObject {
@Published var listeUtilisateurs:[personne] = []
// execution de la connexion à URL
func startRequeteJSONDecoder() {
let urlString = "https://jsonplaceholder.typicode.com/users"
// verication que l'on à bien une url
if let url = URL(string: urlString) {
//ouverture de session
URLSession.shared.dataTask(with: url) { (data, response, error) in
// verification à ton des donnees
if let mesDonnees = data {
do {
// essai de decoder le fichier struct
let resultat = try JSONDecoder().decode([personne].self, from: mesDonnees)
DispatchQueue.main.async { [self] in
// lecture des variable de la struct
// rrempli le le tableau
self.listeUtilisateurs = resultat
}
} catch {
print(error.localizedDescription)
}
} // fin de verivication de données
}.resume() // resultat de la requete
} // url
}
}
import SwiftUI
struct ContentView: View {
@StateObject var connexion = APIRequete()
var body: some View {
NavigationView {
List {
ForEach(connexion.listeUtilisateurs,id: \.id) { donnee in
HStack {
Image(systemName: "person.circle")
.foregroundColor(.red)
NavigationLink(
destination: DetailUtilisateurs(),
label: {
Text(" nom: \(donnee.name)")
})
}
}
}
.navigationTitle("Liste des Utilisateurs")
.onAppear {
self.connexion.startRequeteJSONDecoder()
}
} // fin body
}
} // fin some
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
import Foundation
struct personne:Decodable {
var id :Int
var name:String
var username:String
var email:String
var address:address
var phone:String
var website:String
var company:company
}
struct address:Decodable {
var street:String
var suite:String
var city:String
var zipcode:String
var geo:geo
}
struct geo:Decodable {
var lat:String
var lng:String
}
struct company:Decodable {
var name:String
var catchPhrase:String
var bs:String
}
import SwiftUI
struct DetailUtilisateurs: View {
var body: some View {
Text(« Détail Utilisateur: »)
}
}
struct DetailUtilisateurs_Previews: PreviewProvider {
static var previews: some View {
DetailUtilisateurs()
}
}
Je continue à chercher !
MAJ le code ci-dessus à changé j’ai créé une vue liste qui reprend le code de la liste qui était dans la vue contentView. / gitHub est à jour.
Je ne vois toujours pas comment récupérer l’index de la cellule de liste pour pouvoir alimenter la vue « détailUtilisateur » dans mon exemple.