2017-01-17 133 views
1

任何人都可以帮我把这个从JavaScript转换成Swift 3语法吗?Firebase Swift语法

我想获取特定用户的所有客户端。 我有客户保存在自己的节点,然后我有每个用户的clientID列表。

我相信这段代码会起作用,因为在它的指南中描述了类似的情况,数据以相同的方式组织,但它不是快速的语法,特别是.on和.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

我想其他的方法来做到这一点可能是获取当前用户的clientId,然后做的所有客户端的调用。通过clientID过滤它们。

或者

抓取当前用户的clientId,然后通过他们循环,使得使用该ID每个客户的具体通话。

我只是不知道是否在for循环内对firebase进行多次调用是不好的做法。或者更糟糕的是,要将更多的数据拉下来,然后过滤它。

感谢您的帮助!

+1

这实在不是一个代码编写服务,所以它会最好尝试编写代码,并让我们知道你在哪里运行信息难度。请查看[如何提问](http://stackoverflow.com/help/on-topic)。此外,未来,请将您的Firebase结构作为文本发布,而不是图片 - 这样可以搜索,并且在回答时我们不必重新输入。在这种情况下,这很容易,所以我发布了一个快速答案。 – Jay

回答

2

这将让客户对uid_0,根据您的结构

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) 
     } 
    }) 
1

使用此示例代码才能获得期望的结果

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