我正在尝试在 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")
}
}
}
答案 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")
}