Вы создаете переменную, и явно указываете, что в этой переменной должен быть объекта Apartment
var apartment: Apartment
Но при создании переменной вы указали тип, но не указали что в ней находится. То есть вы просто сделали пустую переменную, в которой должен находиться объект Apartment, а в swift в переменной обязательно должно что-то быть. И тут вопрос, что положить в эту переменную, если объектов Apartment еще не создано в проекте? Swift предлагает следующее решение:
Указать тип переменной как опциональный, делается это путем установки в конце типа знака вопроса "?".
var apartment: Apartment?
Это позволяет сообщить переменной, что в ней значение будет не определено, оно может быть, а может и не быть.
Интуитивно мы можем понять это так:
Переменная как шкаф, которая требует, чтобы в него что-то положили, иначе работать он не будет, мы как бы обманываем этот шкаф, и кладем в него пустую коробку, и как бы шкаф уже не пустой, условия работы шкафа выполнены, по факту в нем коробка, но она пустая.
И в будущем мы сможем в эту самую пустую коробку положить объект Apartment, и в итоге у нас будет шкаф, в котором коробка, в которой находится объект
Нюанс работы:
Но тут возникает следующий нюанс, когда мы захотим забрать этот объект из шкафа, мы получим как раз ту самую коробку, в которой будет нужны нам объект, и нам нужно будет соответственно достать этот объект из коробки, это называется "раскрытие опционала".
Методы раскрытие опционала бывают очень разные, безопасные и не безопасные, но это уже тема для другого вопроса, эти методы вы можете с легкость найти в интернете на любом языке, потому что это основы swift.
Указать тип переменной