swift多个userDefaults对象

时间:2016-04-13 16:33:36

标签: ios xcode swift nsuserdefaults

我正在使用此结构在我的应用中保存令牌:

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")
    }

}

我知道我要覆盖现有的已保存对象,但是我可以保存多个对象吗?像这样:

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")
    }

2 个答案:

答案 0 :(得分:2)

是的,只要它有不同的密钥。但是,这可以从您的示例中将令牌对象保存到多个键。如果这是你的意图,那没有什么不妥。

用户默认值是一种持久存储形式,可以保存许多类型的值(不仅仅是字符串)。

答案 1 :(得分:1)

接受的答案是正确的,但我想展示如何在Swift中处理NSUserDefaults的另一种方法。

通过使用计算属性而不是方法或函数,很容易使用NSUserDefaults作为后备变量 - 并且由于所有set和get操作都是通过此属性执行的,因此不需要进一步的代码来确保属性具有正确性值。

来自生产代码:

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
    }
}