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


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

9 58

9 ответов:

ref:NSUserdefault objectTypes

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

шаги

  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 где вы хочу!--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)

Swift 4

значение:

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

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

UserDefaults.standard.object(forKey: yourKey)