title: Xcode: Why is my optional value nill while unwrapping?
body: <p>Can someone please look trough my code and tell me why my value is nil. If you need me to post other files I will. The project is mostly firebase and the app crashes whenever you try to post within the application. I believe it is crashing when the screen has to be updated because the data is hitting the database.</p>
  
  <pre><code>import UIKit
  import FirebaseFirestore
  
  class FeedVC: UITableViewController {
  
  
  
      var db = Firestore.firestore()
      var postArray = [Posts]()
  
      override func viewDidLoad() {
          super.viewDidLoad()
  
          //db = Firestore.firestore()
  //loadData()
        // checkForUpdates()
  
  
      }
         override func viewDidAppear(_ animated: Bool){
          loadData()
          checkForUpdates()
  
  
      }
  
      func loadData() {
          db.collection("posts").getDocuments() {
              querySnapshot, error in
              if let error = error {
                  print("\(error.localizedDescription)")
              }else{
                  self.postArray = querySnapshot!.documents.flatMap({Posts(dictionary: $0.data())})
                  DispatchQueue.main.async {
                      self.tableView.reloadData()
                  }
              }
          }
  
  
      }
  
      func checkForUpdates() {
          db.collection("posts").whereField("timeStamp", isGreaterThan: Date())
              .addSnapshotListener {
                  querySnapshot, error in
  
                  guard let snapshot = querySnapshot else {return}
  
                  snapshot.documentChanges.forEach {
                      diff in
  
                      if diff.type == .added {
                          self.postArray.append(Posts(dictionary: diff.document.data())!)
                          DispatchQueue.main.async {
                              self.tableView.reloadData()
                          }
                      }
                  }
  
          }
      }
  
      @IBAction func composePost(_ sender: Any) {
  
  
  
  
  
  
          let composeAlert = UIAlertController(title: "New Post", message: "Enter your name and message", preferredStyle: .alert)
  
          composeAlert.addTextField { (textField:UITextField) in
              textField.placeholder = "Your name"
          }
  
          composeAlert.addTextField { (textField:UITextField) in
              textField.placeholder = "Your message"
          }
  
          composeAlert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
  
          composeAlert.addAction(UIAlertAction(title: "Send", style: .default, handler: { (action:UIAlertAction) in
  
              if let name = composeAlert.textFields?.first?.text, let content = composeAlert.textFields?.last?.text {
  
                  let newSweet = Posts(name: name, content: content, timeStamp: Date())
  
                  var ref:DocumentReference? = nil
                  ref = self.db.collection("posts").addDocument(data: newSweet.dictionary) {
                      error in
  
                      if let error = error {
                          print("Error adding document: \(error.localizedDescription)")
                      }else{
                          print("Document added with ID: \(ref!.documentID)")
                      }
  
                  }
  
              }
  
          }))
  
          self.present(composeAlert, animated: true, completion: nil)
  
  
      }
  
  
  
      // MARK: - Table view data source
      override func numberOfSections(in tableView: UITableView) -&gt; Int {
  
          return 0
      }
  
      override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -&gt; Int {
  
          return postArray.count
      }
  
  
      override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -&gt; UITableViewCell {
          let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
  
          let sweet = postArray[indexPath.row]
  
          cell.textLabel?.text = "\(sweet.name): \(sweet.content)"
          cell.detailTextLabel?.text = "\(sweet.timeStamp)"
  
          return cell
      }
    }
  
  import Foundation
  import FirebaseFirestore
  
  protocol DocumentSerializable  {
      init?(dictionary:[String:Any])
  }
  
  
  struct Posts {
      var name:String
      var content:String
      var timeStamp:Date
  
      var dictionary:[String:Any] {
          return [
              "name":name,
              "content" : content,
              "timeStamp" : timeStamp
          ]
      }
  
  }
  
  extension Posts : DocumentSerializable {
      init?(dictionary: [String : Any]) {
          guard let name = dictionary["name"] as? String,
              let content = dictionary["content"] as? String,
              let timeStamp = dictionary ["timeStamp"] as? Date else {return nil}
  
          self.init(name: name, content: content, timeStamp: timeStamp)
      }
  }
  
  
  
  
  
  </code></pre>