Exécution d'opérations réseau avec Combine Framework dans Swift
Dans ce tutoriel, nous allons explorer comment utiliser le framework Combine dans Swift pour effectuer des opérations réseau. Les opérations réseau sont une partie essentielle du développement d'applications mobiles, et Combine fournit un moyen puissant de gérer les événements asynchrones.
Tout d'abord, nous avons besoin d'une URL qui renverra les données JSON. Pour cet exemple, nous utiliserons l'API JSON Placeholder, qui est une fausse API REST en ligne pour les tests et le prototypage. Le code suivant crée un objet URL pour l'API :
let url = URL(string: "https://jsonplaceholder.typicode.com/posts")!
func getPosts() -> AnyPublisher<Data, Error> {
return URLSession.shared.dataTaskPublisher(for: url)
.map(\.data)
.eraseToAnyPublisher()
}
Maintenant que nous avons notre getPosts()fonction, utilisons-la pour récupérer les données JSON. Le code suivant montre comment utiliser la sinkfonction pour recevoir les données :
var cancellable: AnyCancellable?
cancellable = getPosts()
.sink(receiveCompletion: { completion in
switch completion {
case .failure(let error):
print(error.localizedDescription)
case .finished:
break
}
}, receiveValue: { data in
let decoder = JSONDecoder()
if let posts = try? decoder.decode([Post].self, from: data) {
// Do something with the posts
}
})
Pour afficher les publications dans une vue de liste, nous créons une nouvelle structure appelée PostList. Le code suivant montre comment définir la PostListstructure :
struct Post: Codable {
let userId: Int
let id: Int
let title: String
let body: String
}
struct PostList: View {
@State var posts: [Post] = []
var body: some View {
List(posts, id: \.id) { post in
VStack(alignment: .leading) {
Text(post.title)
.font(.headline)
Text(post.body)
.font(.subheadline)
}
}
.onAppear(perform: fetchData)
}
func fetchData() {
cancellable = getPosts()
.sink(receiveCompletion: { completion in
switch completion {
case .failure(let error):
print(error.localizedDescription)
case .finished:
break
}
}, receiveValue: { data in
let decoder = JSONDecoder()
if let posts = try? decoder.decode([Post].self, from: data) {
self.posts = posts
}
})
}
}
C'est ça! Nous avons utilisé avec succès le framework Combine pour effectuer des opérations réseau et afficher les données dans une vue de liste.
En conclusion, l'utilisation du framework Combine pour effectuer des opérations réseau dans Swift est un moyen puissant de gérer les événements asynchrones. Le framework fournit de nombreux opérateurs qui facilitent la manipulation des données et la gestion des erreurs. Avec la getPosts()fonction, nous avons pu récupérer les données JSON, et avec la PostListstructure, nous avons pu afficher les données dans une vue de liste. Ce n'est que la pointe de l'iceberg, et il y a beaucoup plus à explorer avec le framework Combine.
![Qu'est-ce qu'une liste liée, de toute façon? [Partie 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































