Как я могу использовать UserDefaults в Swift?

Как я могу использовать UserDefaults для сохранения / извлечения строк, булевых и других данных в Swift?

ref: Объект NSUserdefaultTypes

Swift 3 и выше

хранить

UserDefaults.standard.set(true, forKey: "Key") //Bool UserDefaults.standard.set(1, forKey: "Key") //Integer UserDefaults.standard.set("TEST", forKey: "Key") //setObject 

извлекать

  UserDefaults.standard.bool(forKey: "Key") UserDefaults.standard.integer(forKey: "Key") UserDefaults.standard.string(forKey: "Key") 

Удалить

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

Swift 2 и ниже

хранить

 NSUserDefaults.standardUserDefaults().setObject(newValue, forKey: "yourkey") NSUserDefaults.standardUserDefaults().synchronize() 

извлекать

  var returnValue: [NSString]? = NSUserDefaults.standardUserDefaults().objectForKey("yourkey") as? [NSString] 

Удалить

  NSUserDefaults.standardUserDefaults().removeObjectForKey("yourkey") 

Имя пользователя UserDefaults

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

Вариант использования заключается в том, что я хочу отделить мои UserDefaults (для разных бизнес-логик может потребоваться группировка Userdefaults по отдельности) с помощью идентификатора, аналогичного SharedPreferences от Android. Например, когда пользователь в моем приложении нажимает кнопку выхода из системы, я хочу очистить связанные с учетной записью значения по умолчанию, но не местоположение устройства.

 let user = UserDefaults(suiteName:"User") 

использование синхронизации userDefaults , подробная информация добавлена ​​в дубликат ответа.

Лучший способ использования UserDefaults

меры

  1. Создание расширения UserDefaults
  2. Создать перечисление с необходимыми ключами для хранения в локальных
  3. Храните и загружайте локальные данные везде, где хотите.

Образец

 extension UserDefaults{ //MARK: Check Login func setLoggedIn(value: Bool) { set(value, forKey: UserDefaultsKeys.isLoggedIn.rawValue) //synchronize() } func isLoggedIn()-> Bool { return bool(forKey: UserDefaultsKeys.isLoggedIn.rawValue) } //MARK: Save User Data func setUserID(value: Int){ set(value, forKey: UserDefaultsKeys.userID.rawValue) //synchronize() } //MARK: Retrieve User Data func getUserID() -> Int{ return integer(forKey: UserDefaultsKeys.userID.rawValue) } } 

перечисление для ключей, используемых для хранения данных

 enum UserDefaultsKeys : String { case isLoggedIn case userID } 

Сохранить в UserDefaults, где вы хотите

 UserDefaults.standard.setLoggedIn(value: true) // Bool UserDefaults.standard.setUserID(value: result.User.id!) // integer 

Получение данных в любом месте приложения

 print("ID : \(UserDefaults.standard.getUserID())") UserDefaults.standard.getUserID() 

Удалить значения

 UserDefaults.standard.removeObject(forKey: UserDefaultsKeys.userID) 

Таким образом, вы можете хранить примитивные данные в лучших

Обновление Вам не нужно использовать synchronize () для хранения значений. Как заметил @Moritz, это лишний и дал статью об этом. Запланируйте комментарии для получения более подробной информации

Swift 4 :

хранить

  UserDefaults.standard.set(object/value, forKey: "key_name") 

Retrive

  var returnValue: [datatype]? = UserDefaults.standard.object(forKey: "key_name") as? [datatype] 

Удалить

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

Вы можете использовать NSUserDefaults быстрым таким образом,

 @IBAction func writeButton(sender: UIButton) { let defaults = NSUserDefaults.standardUserDefaults() defaults.setObject("defaultvalue", forKey: "userNameKey") } @IBAction func readButton(sender: UIButton) { let defaults = NSUserDefaults.standardUserDefaults() let name = defaults.stringForKey("userNameKey") println(name) //Prints defaultvalue in console } 
 //Save NSUserDefaults.standardUserDefaults().setObject("yourString", forKey: "YourStringKey") //retrive let yourStr : AnyObject? = NSUserDefaults.standardUserDefaults().objectForKey("YourStringKey") 

Я нормально сохранил NSDictionary и смог правильно его получить.

  dictForaddress = placemark.addressDictionary! as NSDictionary let userDefaults = UserDefaults.standard userDefaults.set(dictForaddress, forKey:Constants.kAddressOfUser) 

// Для получения данных из NSDictionary.

 let userDefaults = UserDefaults.standard let dictAddress = userDefaults.object(forKey: Constants.kAddressOfUser) as! NSDictionary 

В classе A задайте значение для ключа:

 let text = "hai" UserDefaults.standard.setValue(text, forKey: "textValue") 

В classе B получите значение для текста, используя ключ, объявленный в classе A и назначьте его соответствующей переменной, которая вам нужна:

 var valueOfText = UserDefaults.value(forKey: "textValue") 

Swift 4, я использовал Enum для обработки UserDefaults.

Это всего лишь пример кода. Вы можете настроить его в соответствии с вашими требованиями.

Для сохранения, извлечения, удаления. Таким образом просто добавьте ключ для ключа UserDefaults в перечисление. Учитывайте значения при получении и хранении в соответствии с типом данных и вашими требованиями.

 enum UserDefaultsConstant : String { case AuthToken, FcmToken static let defaults = UserDefaults.standard //Store func setValue(value : Any) { switch self { case .AuthToken,.FcmToken: if let _ = value as? String { UserDefaults.standard.set(value, forKey: self.rawValue) } break } UserDefaults.standard.synchronize() } //Retrieve func getValue() -> Any? { switch self { case .AuthToken: if(UserDefaults.standard.value(forKey: UserDefaultsConstant.AuthToken.rawValue) != nil) { return "Bearer "+(UserDefaults.standard.value(forKey: UserDefaultsConstant.AuthToken.rawValue) as! String) } else { return "" } case .FcmToken: if(UserDefaults.standard.value(forKey: UserDefaultsConstant.FcmToken.rawValue) != nil) { print(UserDefaults.standard.value(forKey: UserDefaultsConstant.FcmToken.rawValue)) return (UserDefaults.standard.value(forKey: UserDefaultsConstant.FcmToken.rawValue) as! String) } else { return "" } } } //Remove func removeValue() { UserDefaults.standard.removeObject(forKey: self.rawValue) UserDefaults.standard.synchronize() } } 

Для хранения значения в userdefaults,

 if let authToken = resp.data?.token { UserDefaultsConstant.AuthToken.setValue(value: authToken) } 

Для получения значения из userdefaults,

 //As AuthToken value is a string (UserDefaultsConstant.AuthToken.getValue() as! String) 

Swift 4

значение настройки:

 UserDefaults.standard.set(yourValue, forKey:yourKey) 

получение значения:

 UserDefaults.standard.object(forKey: yourKey) 
Interesting Posts

Более короткий синтаксис для кастинга из списка в список ?

Datepicker: как всплывать datepicker при нажатии на edittext

npm install -g karma error MSB4019: импортированный проект «C: \ Microsoft.Cpp.Default.props» не найден

Сервер WAMP не работает должным образом в Windows 10

Как удалить элемент из вектора во время цикла?

Можем ли мы иметь условия гонки в однопоточной программе?

Как медиаплеер играет в midi .mid-файлы?

Программно заданный фон телефона Android

Recyclerview мучительно медленно загружает кешированные изображения из Picasso

Автокоррект для «толстых пальцев» – MS Word

Не удается заставить карты памяти работать вместе

Makefile для размещения объектных файлов из исходных файлов разных каталогов в один отдельный каталог?

Как заставить Windows 7 Network показывать общий ресурс Samba после перезагрузки или восстановления VM?

Как объекты хранятся в памяти на C ++?

Как изменить приложение по умолчанию для всех файлов определенного типа файла через терминал в OS X?

Давайте будем гением компьютера.