Mostrar publicaciones de los usuarios a los que está siguiendo – swift

He hecho una siguiente function donde los usuarios pueden seguir entre sí. El problema es que no se usa de la manera que debería. En el momento en que un usuario escribe una publicación, se saveá en mi database Firebase bajo esta reference:

FIRDatabase.database().reference().child("feed-items").childByAutoId()

Los feed-items son donde están todas las publicaciones. Ahora estoy cambiando eso, así que cuando un usuario publica algo, se saveá aquí:

FIRDatabase.database().reference().child("Users").child(UserID).child("Posts").childByAutoId()

Lo hago porque de alguna manera me dice que sería más fácil mostrar solo las publicaciones de las personas que sigues en mi feed de aplicaciones.

En este momento recibo todas las publicaciones de mi feed (desde feed-items) como esta:

 func startObersvingDB() { FIRDatabase.database().reference().child("feed-items").observeEventType(.Value, withBlock: { (snapshot: FIRDataSnapshot) in var newUpdates = [Sweet]() for update in snapshot.children { let updateObject = Sweet(snapshot: update as! FIRDataSnapshot) newUpdates.append(updateObject) } self.updates = newUpdates.reverse() self.tableView.reloadData() }) { (error: NSError) in print(error.description) } } 

Y luego invoco startObservingDB () en viewDidLoad.

Si quieres ver mi estructura Sweet aquí es:

 import Foundation import FirebaseDatabase import FirebaseAuth import UIKit struct Sweet { let key: String! let content: String! let addedByUser: String! let profilePhoto: String! let itemRef: FIRDatabaseReference? init (content: String, addedByUser: String, profilePhoto: String!, key: String = "") { self.key = key self.content = content self.addedByUser = addedByUser self.profilePhoto = profilePhoto self.itemRef = nil } init (snapshot: FIRDataSnapshot) { key = snapshot.key itemRef = snapshot.ref path = key if let theFeedContent = snapshot.value!["content"] as? String { content = theFeedContent } else { content = "" } if let feedUser = snapshot.value!["addedByUser"] as? String { addedByUser = feedUser } else { addedByUser = "" } if let feedPhoto = snapshot.value!["profilePhoto"] as? String! { profilePhoto = feedPhoto } else { profilePhoto = "" } } func toAnyObject() -> AnyObject { return ["content":content, "addedByUser":addedByUser, "profilePhoto":profilePhoto!] } } 

Y en mi TableViewController estoy usando esto para mostrar el nombre, etc. en la celda personalizada:

 var update = updates[indexPath.row] cell.nameLabel.text = update.addedByUser 

etcétera etcétera.

Mi pregunta es: ¿Cómo cambio eso para mostrar solo las publicaciones de las personas que estoy siguiendo?

Perdón por la publicación larga

Suponiendo que está guardando su list de seguidores como un dictionary en otro nodo padre como este:

 user_followed_by :{ userID2 : { userID1 : true, userID5 : true, userID6 : true, userID12 : true, userID99 : true, } } users :{ userID2 :{ post :{ postAutoID1 : {...}, postAutoID2 : {...}, ... } } } postsToShowToUser :{ userID1 : { postAutoID1 : true, //These are the post's autoID's of all the users whom // your current user is following postAutoID5 : true, postAutoID3 : true, }, } /* // If you choose to declare a separate section of the post Details in your Database. posts_Of_The_User :{ userID1 : { postAutoID1 : {...//DETAILS}, postAutoID2 : {...//DETAILS}, postAutoID3 : {...//DETAILS}, .... }, } */ 

La idea es que cada vez que un usuario a quien su usuario actual sigue hace una publicación. El ID autoID de esa publicación se anexa en las publicacionesToShowToUser / IDusuario .

Es decir, si userID2 realizará una publicación, se realizará una llamada para anexar el ID autoID de la publicación en todos los usuarios postsToShowToUser / userID que siguen el ID de usuario .

PS: – Recomiendo encarecidamente que muevas los detalles de tu publicación de post sección de post . Conviértalo en un nodo padre separado que consta de múltiples postAutoID como key y que los datos de publicación se valoran. Podría ser útil más adelante, también evitaría la anidación de datos, lo que lo ayudaría a navegar a través de su database.