title: Forced unwrapping vs not
body: <p>Facebook recently updated Parse to support Swift. One of the code examples it gives is this:</p>
  
  <pre><code>var gameScore = PFObject(className: "GameScore")
  gameScore.setObject(1337, forKey: "score")
  gameScore.setObject("Sean Plott", forKey: "playerName")
  gameScore.saveInBackgroundWithBlock { 
  (success: Bool!, error: NSError!) -&gt; Void in
      if success {
          NSLog("Object created with id: \(gameScore.objectId)")
      } else {
          NSLog("%@", error)
      }
  }
  </code></pre>
  
  <p>I'm curious about this part: "(success: Bool!, error: NSError!)", in particular the point of the exclamation marks. My understanding of optionals was something like this:</p>
  
  <p>NSError: this is an NSError, and cannot be nil.
  NSError?: this might include an NSError or it might be nil, but it needs to be unwrapped first.
  NSError!: this is a force-unwrapped NSError?, and thus cannot be nil.</p>
  
  <p>Facebook's example says that success is a Bool! and error is an NSError! - ie, they are both definitely provided. How come they aren't just written as Bool and NSError, providing that Facebook has unwrapped them before sending them on? Also, how can both success and error both be set? Traditional use of NSError would say that it's set to nil when there's no problem.</p>