我想将我的 Struct 中的所有信息上传到 Firebase,但我只添加了要上传的第一个项目。我还在 tableView
中显示 Struct,这很好用。
结构文件:
struct Products {
var name: String = ""
var amount = Int()
}
var prodItems : [Products] = []
结构中填充了一个按钮:
(name
变量是从之前的 ViewController
传递过来的)
@IBAction func addItemButton(_ sender: UIButton){
if let index = i prodItems.index(where: { $0.name == name }) {
prodItems[index].amount += 1
} else {
prodItems.append(Products(name: name, amount: 1))
}
}
结构像这样填充 tableView:
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCell(withIdentifier: "SummaryCell") as! SummaryTableViewCell
name = prodItems[indexPath.row].name
let amount = prodItems[indexPath.row].amount
cell.summaryLabel.text = "\(amount) \(name)"
return cell
}
以上所有工作正常,当我尝试上传到 Firebase 时出现问题。
我正在尝试像这样上传到 Firebase:
@IBAction func orderButton(_ sender: UIButton) {
for items in prodItems {
let firebaseData = "\(items.amount) \(items.name)"
let data = ["Uploaded" : timeStamp, "Order" : firebaseData] as [String : Any]
self.ref?.child("Orders").child(childByAutoId).updateChildValues(data, withCompletionBlock: { (error, ref) in
if error != nil{
print(error!)
return
}
break
}
}
使用此设置,我只能添加第一个项目以上传到 Firebase。
如果用户先添加 1 双鞋,然后添加 1 条牛仔裤到购物车,Firebase 只会得到 1 双鞋。
我怎样才能让 Firebase 接收整个订单?
编辑
我希望它是:...“订单:”2 鞋,1 条牛仔裤,3 顶帽子“
没有 0,1,2 等跟随子“Order”
最佳答案
问题是因为updateChildValues
这将更新特定子项的整个值,您在 for 循环内调用它。尝试创建字典数组并直接设置整个数组。像这样。
let arrayOfDic = prodItems.map({ ["Uploaded" : timeStamp, "Order" : "\($0.amount) \($0.name)"] })
self.ref?.child("Orders").child(childByAutoId).updateChildValues(arrayOfDic, withCompletionBlock: { (error, ref) in
if error != nil{
print(error!)
}
})
编辑:如果您想将订单设置为字符串值,请像这样设置。
let order = array.map({ String(format: "%d %@", $0.amount, $0.name) }).joined(separator: ", ")
let dic = ["Uploaded" : timeStamp, "Order" : order]
self.ref?.child("Orders").child(childByAutoId).updateChildValues(dic, withCompletionBlock: { (error, ref) in
if error != nil{
print(error!)
}
})
关于swift - 只有第一个添加到结构的项目被上传到 firebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51673693/