Wie überprüfen Sie, ob ein Wert größer als ein Firebase-Wert ist und nur überschreiben, wenn der neue Wert höher ist?Schreiben Sie den Firebase-DB-Wert nur, wenn der aktuelle Wert größer als der gespeicherte Wert ist
Dies ist mein aktueller Code, wenn Scores eingereicht werden, aber es ersetzt einfach den Scorewert durch den neuen, unabhängig davon, ob er größer ist oder nicht, und addiert sich ebenfalls zur Gesamtpunktzahl. Ich muss nur den Punktestand aktualisieren, wenn es höher ist und nur zum Gesamtpunktestand hinzufügt, wenn es höher ist.
let dbRef2 = FIRDatabase.database().reference()
dbRef2.queryOrdered(byChild: "Live Scoring Male/\(String(describing: CompLabel.text!))/score\(String(describing: ProblemLabel.text!))").observe(FIRDataEventType.value, with: { (snapshot) in
var previousScore = snapshot.value as? Double
print (previousScore)
})
if Double(ScoreLabel.text!)! > previousScore {
self.dbRef.child("Live Scoring Male/\(String(describing: CompLabel.text!))/score\(String(describing: ProblemLabel.text!))").setValue(Int(ScoreLabel.text!))
self.dbRef.child("Live Scoring Male/\(String(describing: CompLabel.text!))/attempts\(String(describing: ProblemLabel.text!))").setValue(Int(AttemptsLabel.text!))
let dbRef1 = FIRDatabase.database().reference().child("Live Scoring Male/\(String(describing: CompLabel.text!))/scoreTotal")
dbRef1.queryOrdered(byChild: "scoreTotal").observe(FIRDataEventType.value, with: { (snapshot) in
let currentScore = snapshot.value as? Double
let newScore = ["scoreTotal": Double(currentScore!) + Double(self.ScoreLabel.text!)! - Double(self.AttemptsLabel.text!)!*0.1]
self.dbRef.child("Live Scoring Male/\(String(describing: self.CompLabel.text!))").updateChildValues(newScore)
})
dbRef1.removeAllObservers()
}
können wir nicht die Datenvalidierung setzen in Firebase lieber im Code tun? – Shohrab
hm nicht sicher. Meinst du über Firebase-Regeln? – MikeG