Adding items to Firebase array in Swift without observing for array first

Currently I add a new post to my Firebase array by observing for the array first, appending my new post, and then updating the ref:

REF_USER.child(UID).observeSingleEventOfType(.Value, withBlock: { snapshot in
   if !snapshot.exists() {return}
   if let dict = snapshot.value as? Dictionary<String, AnyObject>, 
      let posts = dict["posts" as? [String] {
      posts.append(newPost)
      REF_USER.child(UID + "/posts").setValue(posts)
   }
}

Is there a way to skip the step of observing, and straight away update posts in an array? Hypothetically, something like:

  • Can Swift return value from an async Void-returning block?
  • Why would removeAllObservers() not work in deinit?
  • Firebase query with limit / offset possible solutions
  • Receive limited query with custom start point
  • Firebase database transaction when app is in background iOS
  • How to filter Firebase data in Swift?
  • REF_USER.child(UID + "/posts").addToArray(newPost)
    

    Solutions Collect From Internet About “Adding items to Firebase array in Swift without observing for array first”

    It’s generally good practice to avoid array’s in Firebase as they are super hard to deal with; the individual elements cannot be accessed directly and they cannot be updated – they have to be re-written.

    Not sure why you are going through the steps outlined in your question to add a new post but here’s another solution:

    thisPostRef = postsRef.childByAutoId //create a new post node
    thisPostRef.setValue("here's a new post") //store the post in it
    

    Edit:

    This will result in a structure like this

    posts
      post_id_0: "here's a new post"
      post_id_1: "another post"
      post_id_2: "cool post"
    

    This structure avoids the pitfalls of arrays.

    Another edit. The OP asks how to write it to the users/UID/posts node

    usersRef = rootRef.childByAppendingPath("users")
    thisUserRef = usersRef.childByAppendingPath(the users uid)
    thisUserPostRef = thisUserRef.childByAutoId //create a new post node
    thisUserPostRef.setValue("here's a new post") //store the post in it