从Firebase快照保存/检索数据

时间:2019-01-21 21:32:54

标签: ios swift firebase firebase-realtime-database

我正在尝试保存用户订购的商品,并在另一端获取信息,但是在检索数据时,它似乎不再是字典,并且无法从订单中访问商品。

这就是我用来保存数据的

for (i,item) in currentOrder.enumerated().reversed(){

restaurantRef.child("order").child("dish\(i+1)").updateChildValues([
    "dishName": item.name,
    "dishPrice": item.price,
    "dishQuantity": item.quantity,
    "servWFood": item.servWithFood
    ])

} 这是正在发送的内容的print():

["dishName": "Baked Ricotta and Pancetta Tarts", "servWFood": false, "dishQuantity": 1, "dishPrice": 18.0]
["dishName": "Water", "servWFood": false, "dishQuantity": 1, "dishPrice": 10.0]

,以及数据库发送数据后的外观: Database img

这就是我用来检索数据的内容:

let ref = Database.database().reference().child("Restaurants").child(restaurantUid).child("Tables")

ref.observe(.childChanged) { (snapshot) in

if let dictionary = snapshot.value as? [String:AnyObject]{

    if let orders = dictionary["order"] as? NSDictionary{

        for item in orders{
            print("item \(item)")


        }
    }
}

,item的值为:

item (key: "dish3", value: {
    dishName = "Steak and Tomato Panzanella";
    dishPrice = 25;
    dishQuantity = 1;
    servWFood = 0;
})

我想获得这4种菜肴信息中的每一种,但一直没能做到。

我将不胜感激!谢谢:)

2 个答案:

答案 0 :(得分:0)

尝试此操作以获取“ RestTable1”的订单:

let ref = Database.database().reference().child("Restaurants").child(restaurantUid).child("Tables").child("RestTable1").child("order")

ref.observe(.value) { (snapshot) in
    if let orderChildSnapshots = snapshot.children.allObjects as! [DataSnapshot] {
        for dish in orderChildSnapshots {
            print("dish: \(dish.key)")

            ref.child(dish.key).observeSingleEvent(of: .value) { (dishSnapshot) in
                if let dict = dishSnapshot.value as? [String: AnyObject] {
                    let name = dict["dishName"] as? String
                    let price = dict["dishPrice"] as? Int

                    print("dishName: \(name)")
                    print("dishPrice: \(price)")
                }
            }
        }
    }
}

答案 1 :(得分:0)

很明显,我在到达订单中的商品之后只想再少一层。

                if let orders = dictionary["order"] as? [String:AnyObject]{

                for items in orders{

                    if let item = orders[items.key] as? [String:AnyObject]{
                        let dishName = item["dishName"] as? String
                        let dishPrice = item["dishPrice"] as? Double
                        let dishQuantity = item["dishQuantity"] as? Int
                        let servWFood = item["servWFood"] as? Bool

                        print("dishName \(dishName), dishPrice: \(dishPrice), dishQuantity: \(dishQuantity), servWFood: \(servWFood)")

                    }
                }
            }
相关问题