我的应用程序有登录/退出功能。但是,我放心,当我退出时,我的全局用户变量
有些奇怪我的constants.swift下有一个全局变量
var CURRENT_USER_UID = NSUserDefaults.standardUserDefaults().valueForKey("currentUserUid") as? String
但是,当我从当前用户注销并登录新用户时,在登录功能结束时,我有以下打印语句
print("Sign in successfully. user.uid = \(user?.uid)")
print("CURRENT_USER_UID = \(CURRENT_USER_UID))")
print("NSUserDefaults.standardUserDefaults().valueForKey(KEY_USER_UID) \(NSUserDefaults.standardUserDefaults().valueForKey(KEY_USER_UID))")
这些打印
Sign in successfully. user.uid = Optional("3P9uavuLtDQZV8ColwTseBIrY4w1")
CURRENT_USER_UID = Optional("hakV4smGyveurPhFN7g9rad4xsP2"))
NSUserDefaults.standardUserDefaults().valueForKey("currentUserUid") Optional(3P9uavuLtDQZV8ColwTseBIrY4w1)
" hakV4smGyveurPhFN7g9rad4xsP2"是以前用户的userUID。 " 3P9uavuLtDQZV8ColwTseBIrY4w1"是我刚刚登录的当前用户的UID。如果工作正常,我希望所有三个都是" 3P9uavuLtDQZV8ColwTseBIrY4w1"
有谁知道为什么我的CURRENT_USER_UID不会返回与NSUserDefaults.standardUserDefaults()相同的东西.valueForKey(" currentUserUid")??
答案 0 :(得分:4)
CURRENT_USER_ID
不会反映NSUserDefaults
发生的变化。初始分配的值不会更改,不会再次计算该值。
要解决此问题,您应该将更改的用户ID分配给CURRENT_USER_ID
(当更改时),或者您可以编写一个返回用户ID的全局函数(我更喜欢这种方法而不是更改全局变量在你的代码中):
func getCurrentUserId() -> String?
{
return NSUserDefaults.standardUserDefaults().valueForKey("currentUserUid") as? String
}
答案 1 :(得分:0)
启动应用时会初始化您的全局变量,因此会给出NSUserDefaults.standardUserDefaults().valueForKey("currentUserUid")
在该点返回的值。更新用户默认值时,不会神奇地重新初始化全局。您需要自己更新。
简单(但错误)的解决方案是在完成登录后将uid
值分配给CURRENT_USER_ID
并将其保存到NSUserDefaults
。
右解决方案不使用全局变量。您应该将用户状态封装在适当的类中,并使用它来登录/注销/获取当前用户。