I am currently working on a project with Xcode (User Interface: Storyboard) and Google Firebase. I cannot get my app to display the information like this: Desired output
The way I got this picture was by starting a test project selecting SwiftUI as my User Interface, and only having ONE single view controller. In my app a user will only arrive to this page after they have logged in and click a button that takes them to the table view.
My app currently prints the result at the bottom of Xcode: Current output
import UIKit
import FirebaseFirestore
class AssetViewController: UIViewController {
    @IBOutlet weak var assetList: UITableView!
        override func viewDidLoad() {
            super.viewDidLoad()
    // Do any additional setup after loading the view.
    let db = Firestore.firestore()
                                
    db.collection("assets").getDocuments { (snapshot, error) in
        if error != nil {
            print("error")
        } else {
    for document in (snapshot?.documents)! {
        if let brand = document.data() ["brand"] as? String {
        if let description = document.data() ["description"] as? String {
        if let date = document.data() ["date"] as? String {
        if let cost = document.data() ["cost"] as? String {
        if let serial = document.data() ["serial"] as? String {
        if let warranty = document.data() ["warranty"] as? String {
        if let warranty_cost = document.data() ["warranty_cost"] as? String {
                                            
        print("\(document.documentID) => \(document.data())") }
        }
            }
                }
            }
        }
            }
                }
            }
        }
            }
}
I have the following class:
import Foundation
import FirebaseFirestore
class AssetsViewModel: ObservableObject {
    @Published var assets = [Asset] ()
    
    private var db = Firestore.firestore()
    
    func fetchData() {
        db.collection("assets").addSnapshotListener { (QuerySnapshot, error) in
            guard let documents = QuerySnapshot?.documents else {
                print("No assets in here")
                return
            }
            self.assets = documents.map { (QueryDocumentSnapshot) -> Asset in
                let data = QueryDocumentSnapshot.data()
                
                let brand = data["brand"] as? String ?? ""
                let description = data["description"] as? String ?? ""
                let date = data["date"] as? String ?? ""
                let cost = data["cost"] as? String ?? ""
                let serial = data["serial"] as? String ?? ""
                let warranty = data["warranty"] as? String ?? ""
                let warranty_cost = data["warranty_cost"] as? String ?? ""
                
                return Asset(brand: brand, description: description, date: date, cost: cost, serial: serial, warranty: warranty, warranty_cost: warranty_cost)
            }
            
        }
    }
    
}
And I have the following structure:
import Foundation
struct Asset: Identifiable {
    var id: String = UUID().uuidString
    var brand: String
    var description: String
    var date: String
    var cost: String
    var serial: String
    var warranty: String
    var warranty_cost: String
}
My main goal is to display the information like the first picture. I would appreciate any help given.
This is the code that I used to display the first picture:
import SwiftUI
struct ContentView: View {
    
    @ObservedObject private var viewModel = AssetsViewModel()
    
    var body: some View {
        NavigationView {
            List(viewModel.assets) { asset in
                VStack(alignment: .leading) {
                    Text(asset.brand)
                        .font(.headline)
                    Text(asset.description)
                        .font(.subheadline)
                    Text(asset.date)
                        .font(.subheadline)
                    Text(asset.cost)
                    .font(.subheadline)
                    Text(asset.serial)
                    .font(.subheadline)
                    Text(asset.warranty)
                    .font(.subheadline)
                    Text(asset.warranty_cost)
                    .font(.subheadline)
                }
            }
        .navigationBarTitle("Assets")
            .onAppear() {
            self.viewModel.fetchData()
            }
        }
    }
}
struct AssetViewSwiftUIView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
The post below helped me. The error I was getting was because Swift did not like me naming the ViewTable "assetList". Once I changed the name to "tableView" and changed in the code, it worked well. I added extra code to make the cells auto adjust from here: why UITableViewAutomaticDimension not working?.
Thank you very much for your help!
 
     
    