检索 Firebase 数据库字符串并将字符串转换为整数,因为标签不起作用



>将数据保存到Firebase并检索数据以显示在标签中是有效的,但是当我尝试向标签添加Int时,它会覆盖标签数据。

我添加到标签

var pointsCount = 0
func addPoints(_ points: NSInteger) {
pointsCount += points
pointsLabel.text = "(self.pointsCount)"
}

然后,我将标签内容作为字符串保存到Firebase。

func saveToFirebase() {
let userID = Auth.auth().currentUser!.uid
let points: String = ("(self.pointsCount)")
let savedScores = ["points": points,
"blah": blah,
"blahblah": blahblah]
Database.database().reference().child("users").child(userID).updateChildValues(savedScores, withCompletionBlock:
{
(error, ref) in
if let error = error
{
print(error.localizedDescription)
return
}
else
{
print("Data saved successfully!")
}
})
}

我从实时数据库中检索字符串并将其转换为 Int。

func retrieveFromFirebase() {
guard let userID = Auth.auth().currentUser?.uid else { return }
Database.database().reference().child("users").child(userID).child("points").observeSingleEvent(of: .value) {
(snapshot)
in
guard let points = snapshot.value as? String else { return }
let pointsString = points
if let pointsInt = NumberFormatter().number(from: pointsString) {
let retrievedPoints = pointsInt.intValue
self.pointsLabel.text = "(retrievedPoints)"
} else {
print("NOT WORKING")
}
}

标签完美地显示从数据库中检索到的数据。

然后,如果我尝试向标签添加更多点,它会擦除检索到的数据并从 0 开始添加,就好像标签显示 nil 一样。

我整天都在寻找答案,似乎是一个相当简单的问题,但由于缺乏经验而无法弄清楚。

我尝试将所有内容分开并将数据另存为整数并将数据检索为整数,但问题似乎出在 addPoints 函数上。

请让我知道我做错了什么。

解决方案最终变得非常简单,只需向点函数添加"if"语句即可。

而不是。。。

func addPoints(_ points: NSInteger) {
pointsCount += points
pointsLabel.text = "(self.pointsCount)"
}

它必须是...

func addPoints(_ points: NSInteger) {
if let text = self.pointsLabel.text, var pointsCount = Int(text)
{
pointsCount += points
pointsLabel.text = "(pointsCount)"
}
}

相关内容

  • 没有找到相关文章

最新更新