title: How to delete a child from Firebase (Swift)
body: <p>I've been following a tutorial on making an instragram-esque app, and I'm having a lot of trouble figuring out how to delete a post, both from Firebase and from the feed. The image that the user selects or takes is uploaded to Firebase database with this function:</p>
  
  <pre><code>func uploadToFirebase() {
      AppDelegate.instance().showActivityIndicator()
  
      let uid = FIRAuth.auth()!.currentUser!.uid
      let ref = FIRDatabase.database().reference()
      let storage = FIRStorage.storage().reference(forURL: "gs://cloudcamerattt.appspot.com")
  
      let key = ref.child("posts").childByAutoId().key
      let imageRef = storage.child("posts").child(uid).child("\(key).jpg")
  
      let data = UIImageJPEGRepresentation(self.previewImage.image!, 0.6)
  
      let uploadTask = imageRef.put(data!, metadata: nil) { (metadata, error) in
  
          if error != nil {
              print(error!.localizedDescription)
              AppDelegate.instance().dismissActivityIndicator()
              return
          }
  
          imageRef.downloadURL(completion: { (url, error) in
  
              if let url = url {
                  // how do I add date: NSDate in here?
                  let feed = ["userID" : uid,
                              "pathToImage" : url.absoluteString,
                              "likes" : 0,
                              "author" : FIRAuth.auth()!.currentUser!.displayName!,
                              "postID" : key] as [String : Any]
  
                  let postFeed = ["\(key)" : feed]
  
                  ref.child("posts").updateChildValues(postFeed)
                  AppDelegate.instance().dismissActivityIndicator()
  
                  self.dismiss(animated: true, completion: nil)
              }
          })
      }
      uploadTask.resume()
  }
  </code></pre>
  
  <p>Which ends up in Firebase looking like this:</p>
  
  <p><a href="https://i.stack.imgur.com/0vue1.png" rel="noreferrer"><img src="https://i.stack.imgur.com/0vue1.png" alt="enter image description here"></a></p>
  
  <p>Following a stack overflow answer I found, I tried to set up a delete function to be called when the delete button is pressed. This delete button is on a "photo detail" view, which the user gets to by tapping an image in the image feed - this photo detail view displays the image in a bigger size, along with some other info such as likes:</p>
  
  <pre><code>func deletePost(firstTree: String, childIWantToRemove: String) {
  
      let uid = FIRAuth.auth()!.currentUser!.uid
      let ref = FIRDatabase.database().reference()
      let storage = FIRStorage.storage().reference(forURL: "gs://cloudcamerattt.appspot.com")
  
      let key = ref.child("posts").childByAutoId().key
      let imageRef = storage.child("posts").child(uid).child("\(key).jpg")
  
      ref.child("posts").child(key).child("postID").removeValue { (error, ref) in
          if error != nil {
              print("error \(error)")
          }
      }
  }
  </code></pre>
  
  <p>And call the function here:</p>
  
  <pre><code>@IBAction func moreButtonPressed(_ sender: AnyObject) {
  
      let alertController = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
      let cancelAction = UIAlertAction(title: "Cancel", style: .cancel)
      let destroyAction = UIAlertAction(title: "Delete", style: .destructive) { action in
          print(action)
  
          let ref = FIRDatabase.database().reference()
          let key = ref.child("posts").childByAutoId().key
  
          let firstTree = key
          let valueToRemove = "postID"
          self.deletePost(firstTree: firstTree, childIWantToRemove: valueToRemove)
      }
  
      alertController.addAction(destroyAction)
      alertController.addAction(cancelAction)
      self.present(alertController, animated: true)
  }
  </code></pre>
  
  <p>I'm not really understanding what I'm doing though, and needless to say tapping the delete button does essentially nothing. Can anyone show me how to fix the delete function so I can remove an image/post from firebase properly?</p>
  
  <p>EDIT: I have <code>var selectedPost: Post!</code> in my PhotoDetailController, which is passed from the FeedViewController (image feed) in <code>didSelectItem</code> like so:</p>
  
  <pre><code>func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
      let photoDetailController = self.storyboard?.instantiateViewController(withIdentifier: "photoDetail") as! PhotoDetailController
  
      photoDetailController.selectedPost = posts[indexPath.row]
  
      present(photoDetailController, animated: true, completion: nil)
  }
  </code></pre>
  
  <p>So it has the index path. Another note about the above function is that <code>var posts = [Post]()</code> is instantiated in the FeedViewController, so that's where <code>posts[indexPath.row]</code> comes from.</p>