Riempire una Table da JSON in SwiftUI
In questo articolo vediamo come creare una Table in SwiftUI e riempirla con dati presi da un JSON remoto.
Siamo su macOS ovviamente, non su iOS.
Cominciamo con Book.swift che rappresenta la nostra struttura dati:
import Foundation
struct BookList: Decodable {
let books : [Book]
}
struct Book: Decodable, Identifiable {
public var id: Int
public var title: String
public var isbn: String
enum CodingKeys: String, CodingKey {
case id = "id"
case title = "title"
case isbn = "isbn"
}
}
Poi abbiamo il nostro BookService.swift che esegue la richiesta all'API:
import Foundation
public class BookService: ObservableObject {
@Published var books = [Book]()
init() {
load()
}
func load() {
let url = URL(string: "https://www.mattepuffo.com/api/book/get.php")!
URLSession.shared.dataTask(with: url) {
(data, response, error) in
do {
if let d = data {
let decodedLists = JSONDecoder()
decodedLists.keyDecodingStrategy = .convertFromSnakeCase
let dec = try decodedLists.decode(BookList.self, from: d)
DispatchQueue.main.async {
self.books = dec.books
}
} else {
print("Non ci sono libri")
}
} catch {
print(error)
}
}.resume()
}
}
Infine la nostra finestra:
import SwiftUI
struct ContentView: View {
@ObservedObject var bookService = BookService()
var body: some View {
VStack {
Table(bookService.books) {
TableColumn("TITOLO", value: .title)
TableColumn("ISBN", value: .isbn)
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Enjoy!
swift swiftui table json xcode
Commentami!