In this tutorial a list of todo items will be fetched and displayed in a List. url https://jsonplaceholder.typicode.com/todos
JSON
[
{
"userId": 1,
"id": 1,
"title": "delectus aut autem",
"completed": false
},
{
"userId": 1,
"id": 2,
"title": "quis ut nam facilis et officia qui",
"completed": false
},
{
"userId": 1,
"id": 3,
"title": "fugiat veniam minus",
"completed": false
},
etc.
//
// ContentView.swift
// swiftuidev
//
// Created by Cairocoders
//
import SwiftUI
struct ContentView: View {
@ObservedObject var fetch = FetchToDo()
var body: some View {
VStack {
List(fetch.todos) { todo in
VStack(alignment: .leading) {
Text(todo.title)
Text("\(todo.completed.description)") // print boolean
.font(.system(size: 11))
.foregroundColor(Color.gray)
}
}
}
}
}
class FetchToDo: ObservableObject {
@Published var todos = [Todo]()
init() {
let url = URL(string: "https://jsonplaceholder.typicode.com/todos")!
URLSession.shared.dataTask(with: url) {(data, response, error) in
do {
if let todoData = data {
let decodedData = try JSONDecoder().decode([Todo].self, from: todoData)
DispatchQueue.main.async {
self.todos = decodedData
}
} else {
print("No data")
}
} catch {
print("Error")
}
}.resume()
}
}
struct Todo: Codable, Identifiable {
public var id: Int
public var title: String
public var completed: Bool
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
