gpt4 book ai didi

ios - NSUserDefaults 不保存在类变量的 setter 中

转载 作者:行者123 更新时间:2023-11-29 11:59:00 25 4
gpt4 key购买 nike

当我尝试通过向我的类变量添加一个 setter 来保存到 NSUserDefaults 时(在本例中是 idauthToken 变量,值似乎不是已保存。当我打开断点运行时,idauthToken 的 getter 总是返回 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 的不同线程/模式上运行?

最佳答案

必须在set方法中使用newValue,value还是nil,或者使用didSet,然后才可以使用变量。

关于ios - NSUserDefaults 不保存在类变量的 setter 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37838775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com