Установка глобальных переменных с помощью UserDefaults

Я относительно новичок в этом и попробовал немного кода, но столкнулся с проблемой.

В моем приложении у меня есть глобальная переменная, которая отслеживает, выбрал ли пользователь уже свое имя пользователя или нет. После того, как он выбрал свое имя, я хочу установить для этой переменной постоянное значение true, чтобы я мог отключить переход, который ведет к ViewController имени пользователя.

Но я не могу установить переменную, так как код будет повторно инициализировать переменную каждый раз, когда я снова открываю приложение. И у меня все еще есть проблемы с настройкой UserDefaults.

Надеюсь, я смог более или менее объяснить свою проблему.


person Hyung Duc Da    schedule 31.05.2018    source источник
comment
Трудно помочь без какого-либо кода, не могли бы вы показать код, который вы использовали, и где получить/установить UserDefaults?   -  person Popmedic    schedule 31.05.2018


Ответы (2)


Геттеры UserDefaults вернут nil, если он не установлен, поэтому вам не нужно устанавливать логическое значение, просто проверьте, установлено ли значение следующим образом:

if let username = UserDefaults.standard.string(forKey:"username") {
    // user has created username, and username has the unwrapped value in it
} else {
    // go to set username screen
}

Убедитесь, что после того, как они перейдут на экран установки имени пользователя, вы установили ключ имени пользователя в UserDefaults:

UserDefaults.standard.string(value, forKey:"username")

Где value — введенное значение.

Если вы хотите сбросить значение в UserDefaults (т.е. выйти из системы), используйте функцию removeObject:

UserDefaults.standard.removeObject(forKey:"username")

Это сделает так, что UserDefaults.standard.string(forKey:"username") снова вернет nil.

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

person Popmedic    schedule 31.05.2018
comment
Потрясающий! Спасибо за это, именно то, что я искал :) - person Hyung Duc Da; 01.06.2018

Установите логическое значение в userDefault

UserDefaults.standard.setBool(true, forKey: "is_userName") 

И получить значение для проверки

if UserDefaults.standard.bool(forKey: "is_userName") {
      // User have created username 
} else {
      // Go to set username screen
}
person Ajay saini    schedule 31.05.2018
comment
Теперь это имеет смысл! Спасибо! - person Hyung Duc Da; 01.06.2018