Почему XCode считает это необязательным? - PullRequest
1 голос
/ 10 июня 2019

Я объявляю константу в этой строке кода, но если я не поставлю `! после этого xXcode выдает ошибку:

значение необязательного типа string должно быть развернуто.

Почему XCode считает это необязательным? Я просто объявляю константу типа String и назначаю ее клавише, которую пользователь установит в разделе настроек.

Может быть, потому что я использую настройки UserDefault, а они еще не установлены? Если так, как я могу обойти это?

let jbEmail: String = userDefaults.string(forKey: "JBemail_preference")!

1 Ответ

1 голос
/ 10 июня 2019

Посмотрите документацию для UserDefaults string(forKey:).Он имеет тип возврата String?.Он возвращает необязательное значение, поскольку для данного ключа может не быть значения.

Таким образом, ваша попытка назначить String? для String приводит к ошибке.Принудительная распаковка (добавление !) устраняет ошибку, но это наихудшее из возможных решений, потому что теперь ваше приложение будет аварийно завершать работу, если для ключа нет значения.

Вы должны правильно обработать ситуацию, когда нетзначение для ключа в UserDefaults.

Вы можете назначить значение по умолчанию:

let jbEmail = userDefaults.string(forKey: "JBemail_preference") ?? "Some Default"

Или вы можете условно обработать, если значение отсутствует:

if let jbEmail = userDefaults.string(forKey: "JBemail_preference") {
    // Do something with jbEmail
} else {
    // There is no value, do something else
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...