Retrieve String value from function with closure i

2019-01-09 16:49发布

I am trying to retrieve a string value from Firebase in order to get each username with an unique UID that is passed to the function, which returns the username of the user. However - since the firebase ObserveEvent is in closures, I can't return any value back because the actions happens asynchronous(?). I was wondering if it was a way of accomplishing this?

The function looks like this:

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
}

Obviously this doesn't work, but I want to be able to get the data by doing a GetUsername("whatevertheidmightbe"). Ideas?

1条回答
走好不送
2楼-- · 2019-01-09 17:09

You need to create completion handler like this

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

And call function like this way

self.GetUsername(str) { (name) -> () in
    if name.characters.count > 0 {
         print(name)
    }
    else {
         print("Not found")
    }
}
查看更多
登录 后发表回答