简体   繁体   中英

Firebase Swift syntax

Can anyone help me convert this from JavaScript to Swift 3 syntax?

I am trying to get all of the clients a specific user has. I have clients saved in their own node, then I have a list of clientIDs in each of the users.

I believe this code will work, as a similar situation was described in the guide it comes from, data organized in the same way, but it is not swift syntax, particularly .on and .once.

var usersREF =
  new Firebase("https://awesome.firebaseio-demo.com/users");
var clientsREF =
  new Firebase("https://awesome.firebaseio-demo.com/clients");
var currentUsersClients = userREF.child("userID").child("comments");
currentUsersClients.on("child_added", function(snap) {
  clientsREF.child(snap.key()).once("value", function() {
    // Render the clients on the link page.
  ));
});

Here is the data Structure on Firebase:

这是Firebase上的数据结构

I suppose other ways to do it might be to grab the current Users clientIDs, then do a call for all clients. Filter them via the clientIDs.

Or

Grab the current users clientIDs, then loop through them, making specific calls to each individual client using the ID.

I just don't know if it is bad practice to make multiple calls like that to firebase within a for loop. Or even worse, to pull down much much more data than is neccesary then filter it.

Thanks for any help!

This will get the clients for uid_0, based on your structure

    let userRef = ref.child("users/uid_0")
    userRef.observeSingleEvent(of: .value, with: { snapshot in

        let userDict = snapshot.value as! [String:AnyObject]
        let clientsDict = userDict["clients"] as! [String:AnyObject]

        for client in clientsDict {
            let clientId = client.key
            print(clientId)
        }
    })

Use this sample code to get your desired result

func getUsers(forUserID userID: String, completion: @escaping (User) -> Swift.Void, failure: @escaping () -> ()) {
        if Auth.auth().currentUser != nil {
            Database.database().reference().child("users").child(userID).observe(.childAdded, with: { (snapshot) in
                if snapshot.exists() {
                    let receivedMessage = snapshot.value as! [String: Any]

                    let name = receivedMessage["name"] as? String ?? ""
                    let id = receivedMessage["id"] as? Double ?? 0.0
                    let profileurl = receivedMessage["url"] as? String ?? ""

                    completion(User(name: name, id: id, url: url))
                } else {
                    failure()
                }
            })
        } else {
            failure()
        }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM