在 Swift 3 中设置 UserDefaults 的问题
Posted
技术标签:
【中文标题】在 Swift 3 中设置 UserDefaults 的问题【英文标题】:Issues with Setting UserDefaults in Swift 3 【发布时间】:2017-01-11 02:55:42 【问题描述】:抱歉,如果这是一个初学者问题,但我在网上找不到解决方案。我能找到的大部分帮助都没有解决我的问题,而是针对以前版本的 Swift。
我想保留玩家在游戏中的累积分数。他们第一次登录时它会为零,但每次他们玩时它都会增加,具体取决于他们玩了多少轮。
我尝试了一些安排,但现在我的 AppDelegate 文件中有:
UserDefaults.standard.set(Int(100),forKey:"TotalPoints")
然后,当玩家前进时,在 GameScene 的其他部分:
let defaults=UserDefaults.standard
var CurrentExtras=defaults.integer(forKey: "TotalPoints")
CurrentExtras = CurrentExtras+100
UserDefaults.standard.set(Int(CurrentExtras),forKey:"TotalPoints")
这适用于游戏更新,但一旦我关闭应用程序并重新启动它,它就会恢复到初始值。如何检查初始默认值以确保它没有覆盖?我这样做是否正确?
【问题讨论】:
【参考方案1】:如果您在 AppDelegate 中设置默认值,则每次应用启动时都会将该值设置回 100。
尝试替换:
UserDefaults.standard.set(Int(100),forKey:"TotalPoints")
到:
if UserDefaults.standard.value(forKey: "TotalPoints") == nil
UserDefaults.standard.set(100, forKey: "TotalPoints")
或:
UserDefaults.standard.register(defaults: ["TotalPoints" : 100])
这样它只会在应用第一次启动时将关键的 TotalPoints 设置为 100。
【讨论】:
您使用registerDefaults
的原始答案实际上是一个更好的解决方案。以上是关于在 Swift 3 中设置 UserDefaults 的问题的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 3 中设置 CABasicAnimation 委托的问题?
无法在 MapView,Swift 3 中设置自定义图钉图像
如何在 Alamofire 4 和 Swift 3 中设置方法、标题、参数