2017-03-10 18 views
0

ネットワークファイルとhomeviewControllerfetchAllPosts機能を変更して、post.UIDに従うユーザーのUIDと一致する投稿のみをデータベースから取得するようにします。これにより、フィードに投稿が埋め込まれます私が従うユーザーのここでFirebaseデータベースからデータをフィルタリングする方法を教えてください。

は、私は、データベース内の新しいフォロワーを作る方法を示す参考です:ここでは

let followingRef = "following/" + (self.loggedInUserData?["uid"] as! String) + "/" + (self.otherUser?["uid"] as! String) 

は、ポスト構造がFirebaseデータベース内にある

posts 
    -Ke4gQKIbow10WdLYMTL (generated key) 
     postDate: 
     postId: 
     postPicUrl: 
     postText: 
     postTit: 
     type: 
     uid: looking to match this 

ここで、現在のfetchAllPosts機能ですネットワークファイル

func fetchAllPosts(completion: @escaping ([Post])->()) { 

    let postRef = self.dataBaseRef.child("posts") 
    postRef.observe(.value, with: { (posts) in 

     var resultsArray = [Post]() 
     for post in posts.children { 

      let post = Post(snapshot: post as! FIRDataSnapshot) 
      resultsArray.append(post) 

     } 

     completion(resultsArray) 

    }) { (error) in 
     print(error.localizedDescription) 
    } 

    } 

ここには、homeViのfetchAllPosts機能がありますewController

private func fetchAllPosts(){ 
    authService.fetchAllPosts {(posts) in 
     self.postsArray = posts 
     self.postsArray.sort(by: { (post1, post2) -> Bool in 
      Int(post1.postDate) > Int(post2.postDate) 
     }) 

     self.tableView.reloadData() 
    } 
} 

は、ここに私の迅速なファイルで私のポスト構造である:

struct Post { 


    var username: String! 
    var uid: String! 
    var postId: String! 
    var type: String 
    var postText: String 
    var postTit: String 
    var postPicUrl: String! 
    var postDate: NSNumber! 
    var ref: FIRDatabaseReference! 
    var key: String = "" 

    init(postId: String,postText: String, postTit:String, postDate:NSNumber, postPicUrl: String?, type:String, uid: String, key: String = ""){ 

     self.postText = postText 
     self.postTit = postTit 
     self.postPicUrl = postPicUrl 
     self.type = type 
     self.uid = uid 
     self.postDate = postDate 
     self.postId = postId 

    } 

    init(snapshot: FIRDataSnapshot){ 

     self.ref = snapshot.ref 
     self.key = snapshot.key 
     self.postId = (snapshot.value! as! NSDictionary)["postId"] as! String 
     self.type = (snapshot.value! as! NSDictionary)["type"] as! String 
     self.postPicUrl = (snapshot.value! as! NSDictionary)["postPicUrl"] as! String 
     self.postDate = (snapshot.value! as! NSDictionary)["postDate"] as! NSNumber 
     self.postTit = (snapshot.value! as! NSDictionary)["postTit"] as! String 
     self.uid = (snapshot.value! as! NSDictionary)["uid"] as! String 
     self.postText = (snapshot.value! as! NSDictionary)["postText"] as! String 
    } 


    func toAnyObject() -> [String: Any] { 
     return ["postId":self.postId,"type":self.type, "postPicUrl":self.postPicUrl,"postDate":self.postDate, "postTit":self.postTit,"uid": self.uid, "postText":self.postText,] 
    } 
} 

答えて

0

は、あなたはこれを使用しました。

postRef.queryOrdered(byChild: "uid").queryEqual(toValue: yourUid).observe(.value, with: { 
        snapshot in 

       if let shot = snapshot { 
        let post = Post(snapshot: post as! FIRDataSnapshot) 
       } 

    } 

これは、探しているデータを返します。

関連する問題