I used dropbox to host my json file url : https://dl.dropboxusercontent.com/s/1y7yqdefyayegzo/employeelist.json?dl=0
ContentView.swift
//
// ContentView.swift
// Testapp
//
// Created by Cairocoders
//
import SwiftUI
struct User: Decodable {
let id: String
let name: String
let email: String
let about: String
}
struct ContentView: View {
@State var users = [User]()
var body: some View {
NavigationView {
List{
ForEach(users, id: \.id) { item in
NavigationLink(destination: details(item: item)) {
HStack {
//Image("user")
//.resizable()
//.frame(width: 50, height: 50)
//.clipShape(Circle())
//.overlay(Circle().stroke(Color.white, lineWidth: 4))
Text(item.name)
.font(.headline)
//Text(item.email)
//Text(item.about)
}.padding(7)
}
}
}
.onAppear(perform: loadData)
.navigationTitle("Navigation")
}
}
func loadData() {
guard let url = URL(string: "https://dl.dropboxusercontent.com/s/1y7yqdefyayegzo/employeelist.json?dl=0") else {
print("Invalid URL")
return
}
let request = URLRequest(url: url)
URLSession.shared.dataTask(with: request) {data, response, error in
if let data = data {
//pull out the declaration of the decoder object
let decoder = JSONDecoder()
//set how we want to interpret dates in the JSON
decoder.dateDecodingStrategy = .iso8601
//decode directly to an array of User structs rather than a Response
if let decodedResponse = try?
decoder.decode([User].self, from: data) {
DispatchQueue.main.async {
//decodedResponse is now [User] rather than Response.User
self.users = decodedResponse
}
return
}
}
print("Fetch failed: \(error?.localizedDescription ?? "Unknown error")")
}.resume()
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
details.swift
//
// details.swift
// Testapp
//
// Created by Cairocoders
//
import SwiftUI
struct details: View {
let item: User
var body: some View {
VStack {
Image("user")
.clipShape(Circle())
.overlay(
Circle().stroke(Color.orange, lineWidth: 4)
)
.shadow(radius: 10)
Text(item.name)
.font(.title)
Text(item.email)
.font(.subheadline)
Divider()
Text(item.about)
.font(.headline)
.multilineTextAlignment(.center)
.lineLimit(50)
}.padding()
}
}
