Downcasting opcionales en Swift: como? Escriba, o como! ¿Tipo?

Dado lo siguiente en Swift:

var optionalString: String?
let dict = NSDictionary()

¿Cuál es la diferencia práctica entre las siguientes dos afirmaciones:

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

vs

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