Как я могу использовать 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, деталь info добавил в дубликат ответа.
лучший способ использовать 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, Я использовал 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)