При вызове функции экземпляра объекта объект может быть несуществующим (необязательный тип), кажется, что вы всегда можете поставить вопросительный знак за именем объекта, вместо того, чтобы ставить восклицательный знак за именем объекта, и не сбой.
window!.rootViewController = containerViewController // forced unwrapping
// Can change to question mark and not crash.
window?.rootViewController = containerViewController // Optional chaining
Это вместо использования принудительной развертки вы всегда можете изменить использование опциональной цепочки, и результат будет таким же? Если да, то в чем разница?