![](/img/trans.png)
[英]Save selected items in array of objects to UserDefaults in swift 4
[英]swift multiple userDefaults objects
我正在使用此结构在我的应用程序中保存令牌:
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")
}
是的,只要它具有不同的密钥即可。 这是可能的,但是,从您的示例中,您将令牌对象保存到多个键。 如果这是您的意图,那没有什么错。
用户默认值是一种持久性存储形式,可以保存多种类型的值(不仅仅是字符串)。
公认的答案是正确的,但我想展示另一种在Swift中如何处理NSUserDefaults的方法。
通过使用计算的属性而不是方法或函数,可以很容易地将NSUserDefaults用作后备变量-并且所有设置和获取操作都是通过此属性执行的,因此无需其他代码即可确保该属性具有正确的值。
从生产代码:
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.