Ваша функция синхронная, но, похоже, observeSingleEvent
имеет асинхронный обратный вызов. Вам, по крайней мере, нужно дождаться этого обратного вызова, что означает, что вы не можете вернуть Bool синхронно, а вместо этого используете асинхронный обратный вызов, который вы можете указать в сигнатуре функции, например, func HidingHim(idlabel: String, completion: @escaping (_ flag: Bool) -> Void)
Внутри своего наблюдателя. В завершение вы можете вызвать completion
с соответствующим значением Bool.
Что-то вроде
func hidingHim(idlabel: String, completion: @escaping (_ flag: Bool) -> Void) {
var d = Database.database().reference().child("Users").child(idlabel).child("hidingUser")
var subscription = d.observeSingleEvent(of: .value) { (snapshot) in
if(snapshot.hasChild(Auth.auth().currentUser!.uid)){
completion(true)
} else {
completion(false)
}
}
}
В зависимости от того, как выглядит ваша наблюдаемая реализация, вам может потребоваться удержаться на subscription
, возвращенном при вы наблюдаете SingleEvent, чтобы он не умер до того, как соблюдает какие-либо значения. Если ваше завершение никогда не называется, вот почему. затем вам нужно вернуть подписчика и сохранить его где-нибудь, чтобы сохранить подписку.