@shevchenko__k
Помогаю новорожденным web программистам

Что означает знак вопроса в классе?

Здравствуйте. подскажите пожалуйста что означает знак вопроса?
Класс
class Person {
    var name: String
    init(name: String) {
        self.name = name
    }
    var apartment: Apartment?
    deinit {
        print("\(name) deinit")
    }
}

Почему в данной строчке в конце стоит вопросительный знак?
var apartment: Apartment?
  • Вопрос задан
  • 169 просмотров
Решения вопроса 3
briahas
@briahas
ObjC, Swift, Python
Это поможет или лучше на русском? - https://developer.apple.com/documentation/swift/op...
Ответ написан
Комментировать
vabka
@vabka
Токсичный шарпист
Это значит, что Apartment опциональный и может быть nil или Optional.none
https://habr.com/ru/post/338766/
Ответ написан
Комментировать
Вы создаете переменную, и явно указываете, что в этой переменной должен быть объекта Apartment
var apartment: Apartment

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

Указать тип переменной как опциональный, делается это путем установки в конце типа знака вопроса "?".
var apartment: Apartment?
Это позволяет сообщить переменной, что в ней значение будет не определено, оно может быть, а может и не быть.

Интуитивно мы можем понять это так:
Переменная как шкаф, которая требует, чтобы в него что-то положили, иначе работать он не будет, мы как бы обманываем этот шкаф, и кладем в него пустую коробку, и как бы шкаф уже не пустой, условия работы шкафа выполнены, по факту в нем коробка, но она пустая.
И в будущем мы сможем в эту самую пустую коробку положить объект Apartment, и в итоге у нас будет шкаф, в котором коробка, в которой находится объект

Нюанс работы:
Но тут возникает следующий нюанс, когда мы захотим забрать этот объект из шкафа, мы получим как раз ту самую коробку, в которой будет нужны нам объект, и нам нужно будет соответственно достать этот объект из коробки, это называется "раскрытие опционала".

Методы раскрытие опционала бывают очень разные, безопасные и не безопасные, но это уже тема для другого вопроса, эти методы вы можете с легкость найти в интернете на любом языке, потому что это основы swift.

Указать тип переменной
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы