无法从Firebase获取价值 [英] Can't get value from firebase
问题描述
当我尝试从数据库中获取isBusy属性的值时,出现问题。一个使用的断点,它甚至不去指令,我为isBusy分配一个值,它分配空字符串,并去其他条件。
如果docChild == 0 {
let selectedDoctor = Doctors.doc1
var isBusy = String()
databaseHandle = reference.child(selectedDoctor).child(dateChild ).child(timeChild).child(ReservationFields.isBusy).observe(.childAdded,with:{(snapshot)in
isBusy = snapshot.value as!String
})
if isBusy ==false{
reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.isBusy).setValue(true)
reference。 child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.firstname).setValue(firstNameLabel.text)
reference.child(selectedDoctor).child(dateChild).child(timeChild).child (ReservationFields.lastname).setValue(lastNameLabel.text)
参考.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.pesel).setValue(peselLabel.text)
reference.child(selectedDoctor).child(dateChild).child(timeChild) .child(ReservationFields.telephone).setValue(phoneLabel.text)
} else {
createAlert(title:Przepraszamy - termin jestzajęty,message:Proszęwybrać inny termin)
}
database 答案很简单。 Firebase数据库请求是异步的,因此,如果isBusy ==false语句在达到时,该值不会从数据库获取。改变你的代码:
pre $如果docChild == 0 {
let selectedDoctor = Doctors.doc1
var isBusy = String()
databaseHandle = reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.isBusy).observe(.childAdded,with:{(snapshot) in
isBusy = snapshot.value as!String
if isBusy ==false{
reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields。 isBusy).setValue(true)
reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.firstname).setValue(firstNameLabel.text)
reference.child (selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.lastname).setValue(lastNameLabel.text)
reference.child(selectedDoctor).child(dateChild).child(timeChild).child( ReservationFields.pesel).setValue(peselLabel.text)
引用。 child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.telephone).setValue(phoneLabel.text)
} else {
createAlert(title :Przepraszamy - termin jestzajęty,消息:Proszęwybraćinny termin)
}
})
正如您所看到的,我只是将您的代码移动到处理程序中,所以在之后执行 I have a problem when i try to get value of isBusy property from my database. A used breakpoints and it even doesn't go to instruction where i assign a value for isBusy, it assigns empty string and goes to else condition. The answer is fairly simply. Firebase Database requests are asynchronous, so that at the time you reach your As you can see I simply moved your code into the handler, so it gets executed after your value has been fetched. 这篇关于无法从Firebase获取价值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!if docChild == 0 {
let selectedDoctor = Doctors.doc1
var isBusy = String()
databaseHandle = reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.isBusy).observe(.childAdded, with: { (snapshot) in
isBusy = snapshot.value as! String
})
if isBusy == "false" {
reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.isBusy).setValue("true")
reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.firstname).setValue(firstNameLabel.text)
reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.lastname).setValue(lastNameLabel.text)
reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.pesel).setValue(peselLabel.text)
reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.telephone).setValue(phoneLabel.text)
} else {
createAlert(title: "Przepraszamy - termin jest zajęty", message: "Proszę wybrać inny termin")
}
if isBusy == "false"
statement the value did not get fetched from the Database. Change your code accordingly:if docChild == 0 {
let selectedDoctor = Doctors.doc1
var isBusy = String()
databaseHandle = reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.isBusy).observe(.childAdded, with: { (snapshot) in
isBusy = snapshot.value as! String
if isBusy == "false" {
reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.isBusy).setValue("true")
reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.firstname).setValue(firstNameLabel.text)
reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.lastname).setValue(lastNameLabel.text)
reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.pesel).setValue(peselLabel.text)
reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.telephone).setValue(phoneLabel.text)
} else {
createAlert(title: "Przepraszamy - termin jest zajęty", message: "Proszę wybrać inny termin")
}
})