按下按钮时,执行以下代码。并在控制台中打印出来。
3
2
当前患者ID:2
新患者ID:3
因为您可以明显看到generateID()
在print("2. \(patient.id)")
之前被触发,因此它应该在控制台中打印,如下所示:
当前患者ID:2
新患者ID:3
有什么不对? 我是新人,感谢任何帮助。
@IBAction func buttonPressed(_ sender: UIButton) {
let patientDatabaseReference = Database.database().reference().child("Patients")
print("1. \(patient.id)") // patient.id is naturally set to 3.
patient.id = "2"
patientDatabaseReference.observe(.value, with: { (snapshot) in
for childSnap in snapshot.children {
guard let childSnapshot = childSnap as? DataSnapshot else {
continue
}
if childSnapshot.key == self.patient.id {
self.generateID() // I have made sure that this line gets executed.
}
}
})
print("2. \(patient.id)")
}
//
func generateID() {
let numberOfPatientsReference = Database.database().reference(withPath: "NumberOfPatients")
numberOfPatientsReference.observeSingleEvent(of: .value, with: { snapshot in
if !snapshot.exists() {
return
}
self.patient.id = "\(snapshot.value!)"
print("Current Patient ID: \(self.patient.id)")
var intPatientID = Int(self.patient.id)!
intPatientID += 1
self.patient.id = "\(intPatientID)"
print("New Patient ID: \(self.patient.id)")
})
}
答案 0 :(得分:1)
代码是异步的。这意味着当观察块与网络通信时将发生打印行。如果将print语句放在observe代码块中,它将按照您期望的方式工作。