2017-01-17 183 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() 
     } 
}