In this tutorial we will learn how to display firebase data in List
ContentView.swift
//
// ContentView.swift
// DevSwiftUI
//
// Created by Cairocoders
//
import SwiftUI
struct ContentView: View {
@ObservedObject private var viewModel = userViewModel()
var body: some View {
NavigationView {
List(viewModel.users) { user in
VStack(alignment: .leading) {
Text(user.name).font(.title)
Text(user.surname).font(.subheadline)
}
}.navigationBarTitle("Users")
.onAppear() {
self.viewModel.fetchData()
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
User.swift
//
// User.swift
// DevSwiftUI
//
// Created by Cairocoders
//
import Foundation
struct User: Identifiable {
var id: String = UUID().uuidString
var name: String
var surname: String
}
UserViewModel.swift
//
// UserViewModel.swift
// DevSwiftUI
//
// Created by Cairocoders
//
import Foundation
import FirebaseFirestore
class userViewModel: ObservableObject {
@Published var users = [User]()
private var db = Firestore.firestore()
func fetchData() {
db.collection("users").addSnapshotListener { (querySnapshot, error) in
guard let documents = querySnapshot?.documents else {
print("No documents")
return
}
self.users = documents.map { (queryDocumentSnapshot) -> User in
let data = queryDocumentSnapshot.data()
let name = data["name"] as? String ?? ""
let surname = data["surname"] as? String ?? ""
return User(name: name, surname: surname)
}
}
}
}
DevSwiftUIApp.swift
//
// DevSwiftUIApp.swift
// DevSwiftUI
//
// Created by Cairocoders
//
import SwiftUI
import Firebase
@main
struct DevSwiftUIApp: App {
init() {
FirebaseApp.configure()
}
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
