Opções de downcasting no Swift: as? Digite ou como! Tipo?

Dado o seguinte em Swift:

var optionalString: String?
let dict = NSDictionary()

Qual é a diferença prática entre as duas declarações a seguir:

optionalString = dict.objectForKey("SomeKey") as? String

vs

optionalString = dict.objectForKey("SomeKey") as! String?

questionAnswers(9)

yourAnswerToTheQuestion