当我尝试通过向我的类变量(在本例中为id
和authToken
变量添加setter来保存到NSUserDefaults时,似乎没有保存这些值。当我运行时断点开启时,id
和authToken
的吸气剂即使在设置值后也始终返回nil。
class CurrentUser {
static let defaultInstance = CurrentUser()
func updateUser(id id: String, authToken: String) {
self.id = id
self.authToken = authToken
}
var authToken: String? {
get {
if let authToken = NSUserDefaults.standardUserDefaults().objectForKey("userAuthToken") {
return (authToken as! String)
} else {
return nil
}
}
set {
NSUserDefaults.standardUserDefaults().setObject(authToken, forKey: "userAuthToken")
NSUserDefaults.standardUserDefaults().synchronize()
}
}
var id: String? {
get {
if let id = NSUserDefaults.standardUserDefaults().objectForKey("userId") {
return (id as! String)
} else {
return nil
}
}
set {
NSUserDefaults.standardUserDefaults().setObject(id, forKey: "userId")
NSUserDefaults.standardUserDefaults().synchronize()
}
}
}
但是,当我将行拉出到updateUser函数(更高一级)时,所有函数都按预期工作。
class CurrentUser {
static let defaultInstance = CurrentUser()
func updateUser(id id: String, authToken: String) {
NSUserDefaults.standardUserDefaults().setObject(id, forKey: "userId")
NSUserDefaults.standardUserDefaults().synchronize()
NSUserDefaults.standardUserDefaults().setObject(authToken, forKey: "userAuthToken")
NSUserDefaults.standardUserDefaults().synchronize()
}
var authToken: String? {
get {
if let authToken = NSUserDefaults.standardUserDefaults().objectForKey("userAuthToken") {
return (authToken as! String)
} else {
return nil
}
}
}
var id: String? {
get {
if let id = NSUserDefaults.standardUserDefaults().objectForKey("userId") {
return (id as! String)
} else {
return nil
}
}
}
}
为什么会这样?我错过了什么? {set}是否在不能访问NSUserDefaults的其他线程/模式下运行?
答案 0 :(得分:1)
你必须在set方法中使用newValue
,值仍为零,或者使用didSet
然后你可以使用变量。
答案 1 :(得分:0)
正如Alex所说,你必须在set方法中使用newValue。此外,您可以参考此链接以获取更多详细信息: Store [String] in NSUserDefaults (Swift)