Как я могу использовать UserDefaults в Swift?
Как я могу использовать UserDefaults для сохранения/извлечения строк, логических значений и других данных в Swift?
9 ответов:
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")
удалить все разделы
if let appDomain = Bundle.main.bundleIdentifier { UserDefaults.standard.removePersistentDomain(forName: appDomain) }
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 synchronize, подробная информация добавлена в дубликат ответа.
лучший способ использовать UserDefaults
шаги
- создать расширение UserDefaults
- создать перечисление с необходимыми ключами магазин в местном
- хранить и извлекать локальные данные, где вы хотите
пример
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 где вы хочу!--8-->
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)
таким образом, вы можете хранить примитивные данные в Best
обновление Вам не нужно использовать 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
в Swift таким образом,@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
в классе
A
установите значение ключа:let text = "hai" UserDefaults.standard.setValue(text, forKey: "textValue")
в классе
B
, получить значение для текста с помощью ключа, который объявлен в классеA
и присвоить его соответствующей переменной, которая вам нужна:var valueOfText = UserDefaults.value(forKey: "textValue")
Swift 4, Я использовал перечисление для обработки 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)