неявно развернутый необязательно является опциональным, на самом деле вы можете присвоить значение nil
var s: String! = nil
Но объявив неявно развернутым, вы не должны добавлять ?
каждый раз, когда вы используете его, так , как указано в его имени, оно неявно разворачивается, потому что предполагается, что оно содержит значение nil.
Последствия: если неявно развернутый отсутствуют, скорее всего, когда вы используете его в вашем коде исключение во время выполнения будет сгенерировано - например:
let s: String! = nil
var s1: String = s // Execution was interrupted, reason: EXC_BAD_INSTRUCTION ...
вопрос может превратиться в: почему неявно развернутые OPTIONALS существовать? Ответ заключается в том, что они необходимы для Resolving Strong Reference Cycles Between Class Instances и еще нескольких случаев.
Я бы лично избегал объявления неявно разворачиваемых переменных в моем коде, если у меня нет веской причины (например, для решения ссылочных циклов, как указано выше)