【发布时间】:2021-02-14 04:05:41
【问题描述】:
我目前正在使用 Xcode(用户界面:Storyboard)和 Google Firebase 开展一个项目。我无法让我的应用程序显示如下信息: Desired output
我得到这张照片的方法是启动一个测试项目,选择 SwiftUI 作为我的用户界面,并且只有一个单一的视图控制器。在我的应用中,用户只有在登录并单击将他们带到表格视图的按钮后才会到达此页面。
我的应用当前在 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())") }
}
}
}
}
}
}
}
}
}
}
}
我有以下课程:
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)
}
}
}
}
我有以下结构:
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
}
我的主要目标是像第一张图片一样显示信息。如有任何帮助,我将不胜感激。
这是我用来显示第一张图片的代码:
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()
}
}
下面的帖子帮助了我。我得到的错误是因为 Swift 不喜欢我将 ViewTable 命名为“assetList”。一旦我将名称更改为“tableView”并更改了代码,它就运行良好。我添加了额外的代码来使单元格从这里自动调整:why UITableViewAutomaticDimension not working?。
非常感谢您的帮助!
【问题讨论】:
-
你的表函数在哪里?
标签: swift xcode google-cloud-firestore firebase-authentication swiftui