代码之家  ›  专栏  ›  技术社区  ›  Matt319

在firebase中,观察单个事件时数据不持久[重复]

  •  0
  • Matt319  · 技术社区  · 6 年前

    我试图从firebase中检索一个字符串值,以便使用传递给函数的唯一uid获取每个用户名,该函数返回用户的用户名。但是-自从火场 ObserveEvent 是在 closures ,我无法返回任何值,因为操作已发生 异步的 (?)我想知道这是不是一种实现的方法?

    函数如下所示:

    func GetUsername(uid:String) -> String {
        var username = String()
        firebase.child("Users").child(uid).observeSingleEventOfType(.Value) { (snapshot:FIRDataSnapshot) in
    
            username = snapshot.value!["Username"] as! String
    
        }
    
        return username
    }
    

    显然这不起作用,但是我想通过getusername(“whatevertheidmightbe”)来获取数据。思想?

    0 回复  |  直到 8 年前
        1
  •  7
  •   Nirav D    8 年前

    您需要创建这样的完成处理程序

    func GetUsername(uid:String , completion: (String) -> ()) {
        firebase.child("Users").child(uid).observeSingleEventOfType(.Value) { (snapshot:FIRDataSnapshot) in
        if let username = snapshot.value!["Username"] as? String
            completion(username)
        }
        else {
            completion("")
        }
    }
    

    这样调用函数

    self.GetUsername(str) { (name) -> () in
        if name.characters.count > 0 {
             print(name)
        }
        else {
             print("Not found")
        }
    }