【发布时间】:2019-03-08 18:29:53
【问题描述】:
我在网上找不到如何存储对象数组,以便键“line_items”为每个 menuItem 提供数字,每个 menuItem 的值对应于它自己的数字。换句话说,我需要将数字放在 line_items 之后而不是嵌套键之后,以便可以快速引用每个单独的 MenuItem 对象。我在网上找到了如何制作它,所以每个键都有一个值数组,但我需要 line_items 有一个 MenuItem 对象数组。以下代码崩溃:
public func uploadTransactionData(_ menuItems: [MenuItem], balanceId: String, subTotal: Int, completion: @escaping (() -> ())) {
guard let userId = Auth.auth().currentUser?.uid else { completion(); return }
let utilitiesManager = UtilitiesManager()
let timestamp = utilitiesManager.timestamp()
let params: [String: Any] = ["date": "\(timestamp)",
"balance_id": "\(balanceId)",
"subtotal": "\(subTotal)",
"user_id": "\(userId)",
"line_items": menuItems
]
Firestore.firestore().document("transaction_history/\(timestamp)").setData(params)
{ err in
if let e = err {
print("$-- error creating user \(e)")
completion()
} else {
completion()
}
}
}
这是 MenuItem 模型:
struct MenuItem {
let itemId: String
let name: String
var modifiers: [String]?
var photoName: String?
var photoUrl: String?
var quantity: Int
var price: Int
var sizeAddOnPrice: Int
var toppingsAddOnPrice: Int
let description: String
var size: String
let category: String
init(itemId: String, name: String, modifiers: [String]?, photoName: String?, photoUrl: String?, quantity: Int, price: Int, sizeAddOnPrice: Int, toppingsAddOnPrice: Int, description: String, size: String, category: String) {
self.itemId = itemId
self.name = name
self.modifiers = modifiers
self.photoName = photoName
self.photoUrl = photoUrl
self.quantity = quantity
self.price = price
self.sizeAddOnPrice = sizeAddOnPrice
self.toppingsAddOnPrice = toppingsAddOnPrice
self.description = description
self.size = size
self.category = category
}
【问题讨论】:
-
您能补充一下您遇到的错误吗?
-
*** 由于未捕获的异常“FIRInvalidArgumentException”而终止应用程序,原因:“不支持的类型:_SwiftValue”
-
Firestore 永远不会知道 menuItem 是什么。请看这里:firebase.google.com/docs/firestore/manage-data/data-types 这些是 Firestore 支持的数据类型。
标签: ios swift firebase google-cloud-firestore