Необязательная сила разворачивания не приводит к сбою. Почему бы и нет? - PullRequest
0 голосов
/ 27 апреля 2018

Вот модель пользователя

class User: NSObject, NSCoding {
    var userID: String!
    var username: String!
    var password: String!
    var token: String!

    override init() {
    }
}

var user: User?
user.password = pass
user.username = "foo"
user.userID = "bar"

Когда я создаю user, я не устанавливаю свойство token. Затем я пытаюсь получить доступ к token в примере ниже. Насколько я понимаю, этот способ доступа к token заключается только в проверке, является ли user ноль, но не в проверке, если token - ноль.

user?.token

Я думал, что это приведет к сбою, основываясь на том, как я установил свойства как неявно развернутые опции?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Вы ничего не развернули насильно. Вы объявили token как неявно развернутым , но это не значит, что оно должно быть развернуто. Можно использовать неявно развернутый необязательный параметр, чтобы сделать что-то вроде проверки, является ли он нулевым, без развертывания нулевого значения и сбоя. Что-то вроде if user!.token == nil хорошо, даже если token объявлено так.

0 голосов
/ 27 апреля 2018

Обычно сбой не происходит, поскольку переменная user не была инициализирована. user?.token видит, что пользователь ноль, поэтому результат будет ноль. Это называется необязательной цепочкой. Вы можете прочитать больше здесь . Если вы хотите, чтобы он падал, вы должны init a User объект, прежде чем пытаться получить доступ к полю токена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...