В Язык быстрого языка (книга Apple). Я читал, что вы можете создавать необязательные переменные двумя способами: используя знак вопроса (?) или используя восклицательный знак (!).
Разница в том, что когда вы получаете значение необязательного с (?), вы должны использовать восклицательный знак каждый раз, когда вы хотите получить значение:
var str: String? = "Question mark?"
println(str!) // Exclamation mark needed
str = nil
Пока с помощью (!) вы можете получить его без суффикса:
var str: String! = "Exclamation mark!"
println(str) // No suffix needed
str = nil
В чем разница и почему существуют два способа, если вообще нет разницы?