我正在尝试在游戏中创建一个应用内货币系统。为此,我尝试使用UserDefaults来使每次我关闭应用程序并重新打开或切换到其他viewController并切换回该货币时不会将其重置为零。但是,它似乎不起作用。有人可以告诉我我在做什么错吗?
这是我的代码:
var notesScore = 0
@IBAction func IncreaseNotes(_ sender: UIButton)
{
notesScore = notesScore + 1
notesLabel.text = String(notesScore)
}
override func viewDidLoad()
{
super.viewDidLoad()
view.backgroundColor = colors.themeBlue
notesLabel.textColor = colors.white
var notesScoreDefault = UserDefaults.standard
if (notesScoreDefault.value(forKey: "notesScore") != nil)
{
notesScore = notesScoreDefault.value(forKey: "notesScore") as! NSInteger
notesLabel.text = NSString(format: "Notes: %i", notesScore) as String
}
答案 0 :(得分:4)
更改分数时,应存储分数。例如,当您增加分数时,可以将其存储到userdefaults
中。
@IBAction func IncreaseNotes(_ sender: UIButton) {
notesScore = notesScore + 1
notesLabel.text = String(notesScore)
// Saving score.
UserDefaults.standard.set(self.notesScore, forKey: "notesScore")
}
现在在viewDidLoad
中,您可以按以下方式检索该分数,
let score = UserDefaults.standard.integer(forKey: "notesScore")
notesLabel.text = String(score)
答案 1 :(得分:0)
因此,我通常建议您编写一个UserdefaultsHelper.swift类,在其中存储所有用户默认值并保持跟踪。
它应该看起来像这样:
import UIKit
import Foundation
class UserDefaultsHelper {
static var notesScore: Int? {
get {
return UserDefaults.standard.object(forKey: "notesScore") as? Int
}
set {
UserDefaults.standard.set(newValue, forKey: "notesScore")
}
}
}
之后,您可以在应用程序中的任何地方通过调用以下内容来访问该值:
UserDefaultsHelper.notesScore
这是可选的,因此下次您需要它时,甚至不确定是否存在,可以在viewDidLoad中调用例如:
override func viewDidLoad() {
super.viewDidLoad()
if let notesScore = UserDefaultsHelper.notesScore {
// Do what you want with it here
}
}
然后向其中添加某些内容或执行您想要的操作。例如,我存储类似的userID或pushTokens。对于将来的Userdefaults,您可以将其添加到UserdefaultsHelper.swift
编辑:示例
关于您在评论中的问题。如果您想将其增加5。您可以这样做:
if let existingNotesScore = UserDefaultsHelper.notesScore {
UserDefaultsHelper.notesScore = existingNotesScore + 5
}
说明:使用“ if let”,您可以安全地检查是否在变量notesScore的Userdefaults中保存了某些内容,如果是,它将保存在{}内,您可以访问existingNotesScore中的值。然后,您只需使用现有的+ 5覆盖Userdefaults中的值