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