gpt4 book ai didi

ios - 将 FirebaseDataSnapshot 作为字符串添加到数组 (Swift 3)

转载 作者:行者123 更新时间:2023-11-28 06:23:31 25 4
gpt4 key购买 nike

所以我目前正在尝试获取我的 Firebase 数据库中“帖子”的数量,但出于某种原因,它表示数量等于 1(这是真的),但在调用“postNumber”时会自行重置。我还想将数据保存在数组中供以后使用,所以我将它们全部保存在一个数组中,而不是直接从数据库中读取并且根本不存储任何数据。

viewDidLoad() Function

var postNumber = 0
override func viewDidLoad() {
super.viewDidLoad()

updateFeed()
print("PostNumber in ViewDidLoad: \(self.postNumber)") //equals 0
collectionView?.backgroundColor = .white
}

updateFeed Function

func updateFeed(){
let uid = FIRAuth.auth()?.currentUser?.uid
let ref = FIRDatabase.database().reference(fromURL: "https://firebaseio.com/")

ref.child("users").child(uid!).child("Posts").observe(.value, with: { (snapshot) in
for item in snapshot.children{
let snapshotValue = snapshot.value as? NSDictionary
var snapString = String(describing: item)
var snapInt = Int(snapString)
self.postCollection.append(snapString)
let firstName = (snapshot.value as! NSDictionary)["First Person"] as? String
print("SnapShot: \(snapString)") //gives proper data
self.postNumber = self.postCollection.count
print("PostNumber: \(self.postNumber)") //equals 1
print("PostSource: \(self.postCollection)")
}
})
print("Number of Posts (After Adding): \(self.postCollection.count)") //equals 0
collectionView?.reloadData()
}

最佳答案

它实际上并没有重置自己。问题是您在 Firebase 有机会用 1 替换它之前调用 postNumber。Firebase 查询异步工作,基本上这意味着您的代码将在 Firebase 获取查询结果时继续运行。

显示这一点的一个简单方法是用它替换你的第一行。 didSet 将在每次 postNumber 的值更改时运行。这将准确地向您显示命令的执行顺序。

var postNumber = 0 {
didSet {
print(postNumber)
}
}

如果您使用 postCollection 来填充您的 collectionView,您可以使用

var postCollection = [String]() {
didSet {
collectionView?.reloadData()
}
}

您可以保留其余代码,这应该让您对异步是什么有一个基本的了解。通过一些谷歌搜索,您应该能够找到处理异步代码的优雅方法。

Async vs. synchronous

关于ios - 将 FirebaseDataSnapshot 作为字符串添加到数组 (Swift 3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42649559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com