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

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

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

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

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

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

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

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

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

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

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

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