如何将嵌套数据保存到Firestore?

问题描述 投票:0回答:1

我是新来的。将嵌套数据写入Firestore时发生错误。这是我的数据结构:

struct CartArray: Codable  {
var num:Int
var name:String
var price:Double

init (num: Int,name: String,price: Double)
{   self.num = num
    self.name = name
    self.price = price

}

这是数据记录功能:

 let db = Firestore.firestore()
 var arrayCart: [CartArray] = []

@IBAction func buttonCheckout(_ sender: Any) {
    saveData()
}

...

func saveData () {

    let menuItems = [arrayCart]
    var list_menuItem = [Any]()
    for item in menuItems {
        do {
            let jsonData = try JSONEncoder().encode(item)
            let jsonObject = try JSONSerialization.jsonObject(with: jsonData, options: [])
            list_menuItem.append(jsonObject)
        }
        catch {
            // handle error
        }
    }
  print(list_menuItem)
    let parameters = [
        "address": userAddress as Any,
        "datetime": Timestamp(date: Date()),
        "status": "Заказано",
        "user_phone": userPhone as Any,
        "username": userName as Any,
        "total":cart.total,
        "order":list_menuItem
    ]
    db.collection("orders").document().setData(parameters)
    { err in
        if let e = err {
            print("$-- error save data \(e)")

        } else {
     print("success!")
        }
    }
}

这是数组的转换json:

[<__NSArrayI 0x600001f97880>( { name = "\U041f\U0438\U0440\U043e\U0436\U043a\U0438 \U0441     \U043c\U044f\U0441\U043e\U043c"; num = 3; price = 40; }, 
{ name = "\U041f\U0438\U0446\U0446\U0430 \U0421\U0442\U0430\U043d\U0434\U0430\U0440\U0442"; num = 1; price = 500; } ) ] 

当在“顺序”字段中进行保存时,发生“不支持嵌套数组”错误。为什么?

swift google-cloud-firestore
1个回答
0
投票

问题是在saveData()中创建的是CartArray的数组的数组。

替换:let menuItems = [arrayCart]

带有:let menuItems = arrayCart

© www.soinside.com 2019 - 2024. All rights reserved.