我尝试使用UserDefaults进行评分,以免每次打开时都不会重置为零,但无法正常工作

时间:2018-11-25 02:53:24

标签: swift nsuserdefaults

我正在尝试在游戏中创建一个应用内货币系统。为此,我尝试使用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
    }

2 个答案:

答案 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中的值