我正在使用此结构在我的应用中保存令牌:
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")
}
答案 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
}
}