Swift 传递数据结构和数组 Firebase

Posted

技术标签:

【中文标题】Swift 传递数据结构和数组 Firebase【英文标题】:Swift Passing Data Structs and Arrays Firebase 【发布时间】:2022-01-20 17:38:53 【问题描述】:

我正在尝试将数据从 vc_1 发送到 vc_2。但我观察到 vc_2(篮子项目)中缺少提交的数据。我如何观察vc_2中的所有数据?

Firebase 节点;

Pro_:
     Basket:
        ID_1:
           cat: “Tech”
           info:”ios” 
           orderid:”Ref_1” 
        ID_2:
           cat: “Tech”
           info:”android” 
           orderid:”Ref_2” 
     name:”Mike”

First_VC

    var name_list = [Name_Struct]()
    var SecondArray : [BasketArray] = []

    func retrieve_data()
        ref = Database.database().reference()
        self.ref.child(“Pro_”).observeSingleEvent(of:.value)  (snapshot) in
            self.name_list.removeAll()
            for child in snapshot.children
                let snap = child as! DataSnapshot
                let dict = snap.value as! NSDictionary
                        let name_ = dict[“name”] as? String ?? ""
                let baskets = (child as AnyObject).childSnapshot(forPath: “Basket”).value as? [String: Any] ?? [:]
                for basket in baskets 
                    let pro_detail = basket.value as? [String: Any]
                    let info_ = basket?[“info”] as? String ?? ""
                    let cat_ = basket?[“cat”] as? String ?? ""
                    let orderid_ = basket?[“orderid”] as? String ?? ""
                    self.SecondArray.append(BasketArray(info: info_, cat: cat_, orderid: orderid_)
                
                    let names = Name_Struct(name: name_)
                            self.name_list.append(names)
                        DispatchQueue.main.async 
                            self.tableView.reloadData()
                        
 override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
         if let destination = segue.destination as? Second_VC 
            destination.SecondArray = SecondArray[indexPath.row]
            print(“Send array:”,self.SecondArray)
        

发送数组输出

发送数组:[“cat”:“Tech”,“info”:“iOS”,“orderid”:“Ref_1”] 发送数组:[“cat”:“Tech”,“info”:“Android”,“orderid”:“Ref_2”]

Second_VC

    var SecondArray : BasketArray!
override func viewDidLoad() 
        super.viewDidLoad()

        table_view.delegate = self
        table_view.dataSource = self
    print(“retrieve:”,self.SecondArray)        
    

Second_VC 输出;

检索:[“cat”:“Tech”,“info”:“Android”,“orderid”:“Ref_2”]

【问题讨论】:

【参考方案1】:

这可能是因为在 First_VC 中最嵌套的 for 循环中,您有

self.SecondArray = BasketArray(info: info_, cat: cat_, orderid: orderid_)

因为它在 for 循环中,所以 self.SecondArray 设置为 ID_1 值,然后在第二次运行循环时将其覆盖为 ID_2 值。您希望将两个数据都附加到 SecondArray,而不是像这里那样覆盖它们。

【讨论】:

感谢您的回答。我该如何解决这个问题? 你的 BasketArray,如果它想存储多个 Basket 需要是一个数组 - 所以 var SecondArray : [BasketArray?]。然后你想追加到那个 SecondArray,所以 SecondArray.append(whatever data you parsed) 不太可能是数组中的可选项 我更新了问题。我正在观察第一个 vc 中的所有数据(覆盖 func prepare->send 数组),但我在第二个 vc 中只有一个数组观察

以上是关于Swift 传递数据结构和数组 Firebase的主要内容,如果未能解决你的问题,请参考以下文章

将 Firebase 数据放入数组以放入文本视图 (Swift)

Swift:如何将数据从 TableViewController 传递到 Details VC

在 ChildByAutoId 下从 Firebase 检索数据并添加到数组 - Xcode - Swift

Swift 3 中的 UIPickerView 和子类数组

从 Firebase 读取数据并保存到数组中 (Swift)

将firebase数据添加到ios swift中的数组