简体   繁体   English

快速多个userDefaults对象

[英]swift multiple userDefaults objects

I am using this struct to save a token in my app: 我正在使用此结构在我的应用程序中保存令牌:

struct LocalStore {

    static let userDefaults = NSUserDefaults.standardUserDefaults()

    static func saveToken(token: String) {
        userDefaults.setObject(token, forKey: "tokenKey")
    }

    static func getToken() -> String? {
        return userDefaults.stringForKey("tokenKey")
    }

    static func deleteToken() {
        userDefaults.removeObjectForKey("tokenKey")
    }

}

I know that I wan overwrite existing saved object but can I save multiple objects? 我知道我要覆盖现有的已保存对象,但是我可以保存多个对象吗? Like this: 像这样:

static func saveToken(token: String) {
        userDefaults.setObject(token, forKey: "tokenKey")
    }

static func saveFirstName(firstName: String) {
        userDefaults.setObject(firstName, forKey: "lastNameVal")
    }

static func saveLastName(lastName: String) {
        userDefaults.setObject(lastName, forKey: "firstNameVal")
    }

Yes, as long as it has a different key. 是的,只要它具有不同的密钥即可。 This is possible, however, from your example, you are saving your token object to multiple keys. 这是可能的,但是,从您的示例中,您将令牌对象保存到多个键。 There is nothing wrong with that if that is your intention. 如果这是您的意图,那没有什么错。

User defaults is a form of persistent storage that can save many types of values (not just Strings). 用户默认值是一种持久性存储形式,可以保存多种类型的值(不仅仅是字符串)。

The accepted answer is right, but I want to show another way of how to deal with NSUserDefaults in Swift. 公认的答案是正确的,但我想展示另一种在Swift中如何处理NSUserDefaults的方法。

By using computed properties instead of methods or functions, it is easy to use NSUserDefaults as the backing variable — and as all set and get operations are performed through this property, no further code is needed to ensure that the property has the correct value. 通过使用计算的属性而不是方法或函数,可以很容易地将NSUserDefaults用作后备变量-并且所有设置和获取操作都是通过此属性执行的,因此无需其他代码即可确保该属性具有正确的值。

From production code: 从生产代码:

var sorting:DiscoverSortingOrder {
    set {
        NSUserDefaults.standardUserDefaults().setInteger(newValue.rawValue, forKey: "DiscoverSorting")
        refresh() // will trigger reloading the UI
    }
    get {
        if let s = DiscoverSortingOrder(rawValue: NSUserDefaults.standardUserDefaults().integerForKey("DiscoverSorting")){
            return s
        }
        return .New // Default value
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM