NSUSerDefault没有为swift更新我的全局变量

时间:2016-07-11 06:34:05

标签: ios swift global-variables

我的应用程序有登录/退出功能。但是,我放心,当我退出时,我的全局用户变量

有些奇怪

我的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")??

2 个答案:

答案 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

解决方案不使用全局变量。您应该将用户状态封装在适当的类中,并使用它来登录/注销/获取当前用户。