Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift Can';无法从firebase获取值_Swift_Firebase_Firebase Realtime Database - Fatal编程技术网

Swift Can';无法从firebase获取值

Swift Can';无法从firebase获取值,swift,firebase,firebase-realtime-database,Swift,Firebase,Firebase Realtime Database,当我试图从数据库中获取isBusy属性的值时出现问题。一个已使用的断点,它甚至不进入指令,在指令中我为isBusy赋值,它分配空字符串并进入else条件 if docChild == 0 { let selectedDoctor = Doctors.doc1 var isBusy = String() databaseHandle = reference.child(selectedDoctor).child(dateChild).child(t

当我试图从数据库中获取isBusy属性的值时出现问题。一个已使用的断点,它甚至不进入指令,在指令中我为isBusy赋值,它分配空字符串并进入else条件

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")

        }

答案相当简单。Firebase数据库请求是异步的,因此当您到达
if isBusy==“false”
语句时,该值没有从数据库中获取。相应地更改代码:

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")

        }
   })

正如您所见,我只是将您的代码移动到了处理程序中,因此在获取了您的值之后,它就会执行

XCode让我写self。在许多地方,现在它不去指令,我给isBusy和next指令赋值。