Для чего нужны «?» и «!» возле переменных в Swift?
let foo: String! = "зуб даю что эта переменная содержит значение, и восклицательный знак указывает на это"
print(foo)  // тут восклицательный знак не нужен ибо мы уверены

var bar: String? = "переменная может содержать значение, а может и не содержать, знак вопроса на это указывает"
print(bar!) // восклицательный знак нужен для доступа к значению такой переменной
Попробую расширить ответ:class MyClass {
    let myConst = "тут не оборачиваем, ибо значение будет сразу при инициализации класса, инфа соточка"
    var myFoo = "тут - тоже будет, по этому не оборачиваем"

// а тут нет значения при инициализации класса -> будет ошибка.
    var myBar: String  
    
// придется - либо оборачивать и тут... и в дальнейшем,
    var myBar: String?

//                 - либо писать init метод
    var myBar: String    
    func init() {
         myBar = "вот теперь  переменная не пустая - не оборачиваем"
    }
}