When call a function of an object instance, the object may be not exist(optional type), it seems like you can always put an question mark behind the object name, instead of put an exclamation mark behind the object name, and not crash.
window!.rootViewController = containerViewController // forced unwrapping
// Can change to question mark and not crash.
window?.rootViewController = containerViewController // Optional chaining
Is that in the place of use forced unwrapping, you can always change to use optional chaining, and the result is same? If yes, what is the difference?