Swift 用户默认值不存储值

时间:2021-04-12 15:13:20

标签: swift google-cloud-firestore nsuserdefaults

我正在尝试在 Firestore 中的用户帖子数为 5 时发出警报。我试图在显示警报时使用 userdefaults 来存储 true,以便在显示视图控制器时它不会一直显示。但是,当我尝试使用此代码进行检查时,它每次仍会显示警报,因此我假设用户默认值不会更改为 true。有人知道为什么会发生这种情况吗?

 private func checkDueReview(){
    if User.currentUser() != nil {
        let alertShown = UserDefaults.standard.bool(forKey: "ShownAlert")
    
    let currentUser = User.currentUser()!
        
        if alertShown == false && currentUser.numberOfPosts == 5{
                self.present(reviewAlert!, animated: true, completion: nil)
                UserDefaults.standard.set(true, forKey: "ShownAlert")
        }else {
            UserDefaults.standard.set(false, forKey: "ShownAlert")
        }
    }
   
}

1 个答案:

答案 0 :(得分:1)

问题出在您的第二个 if 条件中,您执行 2 个检查但 else 仅对第二个有效,currentUser.numberOfPosts == 5(您的意思是 >= 5 btw?)

所以我会把它改成

if currentUser.numberOfPosts == 5 {
    if alertShown == false {
        self.present(reviewAlert!, animated: true, completion: nil)
        UserDefaults.standard.set(true, forKey: "ShownAlert")
    }
} else {
    UserDefaults.standard.set(false, forKey: "ShownAlert")
} 

可以对您的代码进行一些其他改进,例如将第一个 if 替换为 guard 语句并在检查 false 时使用 !

guard let currentUser = User.currentUser() else { return }
let alertShown = UserDefaults.standard.bool(forKey: "ShownAlert")

if currentUser.numberOfPosts == 5 {
    if !alertShown {
        self.present(reviewAlert!, animated: true, completion: nil)
        UserDefaults.standard.set(true, forKey: "ShownAlert")
    }
} else {
    UserDefaults.standard.set(false, forKey: "ShownAlert")
}