Ios 从Firebase数据库检索数据时执行顺序关闭

Ios 从Firebase数据库检索数据时执行顺序关闭,ios,swift,firebase-realtime-database,Ios,Swift,Firebase Realtime Database,我想从Firebase检索数据,并在函数中创建User()对象。我上了以下课程: class DatabaseQueries { // Database reference var ref: DatabaseReference? func findUserInfo() -> User { // Haal de userID op waaronder info is opgeslagen in de database. let use

我想从Firebase检索数据,并在函数中创建
User()
对象。我上了以下课程:

class DatabaseQueries {
    // Database reference
    var ref: DatabaseReference?

    func findUserInfo() -> User {
        // Haal de userID op waaronder info is opgeslagen in de database.
        let userID = Auth.auth().currentUser?.uid

        // ref naar de database.
        ref = Database.database().reference()
        var user = User(email: "", group: "")

        ref?.child("Users").child(userID!).observeSingleEvent(of: .value, with: { (snapshot) in
            // Get user value
            let value = snapshot.value as? NSDictionary
            let group = value?["group"] as? String ?? ""
            let email = value?["mail"] as? String ?? ""
            print(group)
            print(email)

            user.email = email
            user.group = group

        }) { (error) in
            print(error.localizedDescription)
        }
        print("Execute return")
        return user
    }
}
仅在订单关闭时返回数据。终端输出如下:

Execute return
User(email: Optional(""), group: Optional(""))
TestGroup
test.mail@gmail.com

如何首先获取要填充的用户结构,然后获取返回的值?

尝试将完成块与调用任何web服务/firebase…等的函数一起使用

  func findUserInfo(completion: @escaping (_ user: User) -> Void) {

    // Haal de userID op waaronder info is opgeslagen in de database.
    let userID = Auth.auth().currentUser?.uid

    // ref naar de database.
    ref = Database.database().reference()


    ref?.child("Users").child(userID!).observeSingleEvent(of: .value, with: { (snapshot) in
        // Get user value
        let value = snapshot.value as? NSDictionary
        let group = value?["group"] as? String ?? ""
        let email = value?["mail"] as? String ?? ""
        print(group)
        print(email)
        var user = User(email: email, group: group)
        completion(user)

    }) { (error) in
        print(error.localizedDescription)

       var user = User(email: "", group: "")
        completion(user)
    }

}

尝试将完成块与调用任何web服务/firebase…等的函数一起使用

  func findUserInfo(completion: @escaping (_ user: User) -> Void) {

    // Haal de userID op waaronder info is opgeslagen in de database.
    let userID = Auth.auth().currentUser?.uid

    // ref naar de database.
    ref = Database.database().reference()


    ref?.child("Users").child(userID!).observeSingleEvent(of: .value, with: { (snapshot) in
        // Get user value
        let value = snapshot.value as? NSDictionary
        let group = value?["group"] as? String ?? ""
        let email = value?["mail"] as? String ?? ""
        print(group)
        print(email)
        var user = User(email: email, group: group)
        completion(user)

    }) { (error) in
        print(error.localizedDescription)

       var user = User(email: "", group: "")
        completion(user)
    }

}

您需要查看“回调”或“完成处理程序”。Soy上有许多相关问题。您需要查看“回调”或“完成处理程序”。这方面有许多相关问题