title: How to work with Firebase without allowing optional values
body: <p>I'm new to iOS development and I understand that allowing optional values when an object is initialized is not a 'good citizen' technique. That being said, I've read that it is good practice to always have values set, like this:</p>
  
  <pre><code>class Item{
      var name: String
      var color: String
      init(name: String, color: String) {
          self.name = name
          self.color = color
      }
  }
  </code></pre>
  
  <p>This looks nice and tidy but how can I do something like that working with Firebase? Look what I've got so far:</p>
  
  <pre><code>private func loadPosts(){
      databaseHandle = ref.child("users/\(self.user.uid)/posts").observe(.value, with:{(snapshot) in
          var newPosts = [Post]()
  
          for itemSnapShot in snapshot.children {
              let post = Post(snapshot: itemSnapShot as! FIRDataSnapshot)
              newPosts.append(post!)
          }
          self.posts = newPosts
          self.tableView.reloadData()
      })
  }
  </code></pre>
  
  <p>This guy is placed in my PostsViewController where I have my table view. This is my model:</p>
  
  <pre><code>class Post {
      var ref: FIRDatabaseReference?
      var title: String?
      var answer: String?
      var contentUrl: String?
      var photoUrl: String?
      var createdAt: String?
      var feeling: String?
      var kind: String?
      var text: String?
      var uid: String?
      var measurements: Dictionary&lt;String, String&gt;?
  
      //MARK: Initialization
      init?(snapshot: FIRDataSnapshot){
          ref = snapshot.ref
  
          let data = snapshot.value as! Dictionary&lt;String, Any&gt;
  
          title = data["title"]! as? String
          answer = data["answer"] as? String
          contentUrl = data["content_url"] as? String
          photoUrl = data["photo_url"] as? String
          createdAt = data["created_at"] as? String
          feeling = data["feeling"] as? String
          kind = data["kind"] as? String
          text = data["text"] as? String
          uid = data["uid"] as? String
          measurements = data["measurements"] as? Dictionary&lt;String, String&gt;
      }
  }
  </code></pre>
  
  <p>I don't know exactly why but those question marks doesn't feel quite right and now and then I get some nil pointer error, which I think I should be able to avoid by using the 'good citizen' technique. </p>
  
  <p>So, does anybody know how can I use Firebase following Swift best practices?</p>