Downcasting-Optionen in Swift: as? Typ oder als! Art?

Angesichts der folgenden in Swift: var optionalString: String? let dict = NSDictionary() Was ist der praktische Unterschied zwischen den folgenden zwei Aussagen: optionalString = dict.objectForKey("SomeKey") as? String vs. optionalString = dict.objectForKey("SomeKey") as!