Swift 3:你如何以编程方式保存高分?

时间:2016-11-02 07:59:28

标签: ios iphone swift swift3

我有一个增加分数的按钮,如果它是最高分,那么即使应用关闭并再次打开,该数字也会保存为高分。

该部分工作正常,但在我重新打开应用程序并单击按钮后,我的高分会重置并等于分数。我认为这是因为我在调用HighscoreDefault时调用了我的高分变量,但是我不知道你如何访问这个值...如果这就是问题。

重新打开应用后,如何让高分不会更改为低于自身的值?

boolean

6 个答案:

答案 0 :(得分:2)

在我看来,保存highscore最方便的方法是实现这样的计算变量:

var highScore: Int {
    get {
        return UserDefaults.standard.integer(forKey: "highScore")
    }
    set {
        UserDefaults.standard.set(newValue, forKey: "highScore")
    }
}

这样,在控制器或单例中有变量之后,您就不会在考虑UserDefaults

答案 1 :(得分:1)

而不是

if let highscore = HighscoreDefault.value(forKey: "highscore") {

            otherlabel.text = "\(otherphrase) \(highscore)"
        }

在ViewDidLoad

中的代码中添加此行
if let highscore = HighscoreDefault.value(forKey: "highscore") {

        otherlabel.text = "\(otherphrase) \(highscore)"
        self.highscore = highscore as! Int
    }

答案 2 :(得分:1)

当您重新打开应用时,UserDefault's可能会保存您的高分数 您的代码没有将其分配给您的ViewController's高分变量

if let highscore = HighscoreDefault.value(forKey: "highscore") as? Int {
        self.highscore = highscore
        otherlabel.text = "\(otherphrase) \(highscore)"
}

答案 3 :(得分:0)

highscore默认值为0,因此每次第一次调用if (increasingNum > highscore)的操作应始终为true。您需要做什么在代码中将HighscoreDefault.value(forKey: "highscore") as? Int分配给highscore

override func viewDidLoad() {

    super.viewDidLoad()

    let label = UILabel(frame: CGRect(x: self.view.frame.size.width / 2 - 100, y: 100, width: 200, height: 20))
    label.textAlignment = .center
    label.text = "\(phrase) \(increasingNum)"
    self.view.addSubview(label)
    self.label = label

    let otherlabel = UILabel(frame: CGRect(x: self.view.frame.size.width / 2 - 100, y: 200, width: 200, height: 20))
    otherlabel.textAlignment = .center
    otherlabel.text = "\(otherphrase) \(highscore)"
    self.view.addSubview(otherlabel)
    self.otherlabel = otherlabel

    let button = UIButton(frame: CGRect(x: self.view.frame.size.width / 2 - 150, y: self.view.frame.size.height / 2 - 50, width: 300, height: 100))
    button.backgroundColor = UIColor.cyan
    button.addTarget(self, action: #selector(scoreGoUp), for: .touchUpInside)
    self.view.addSubview(button)

    if let highscore = HighscoreDefault.value(forKey: "highscore") as? Int {
        // here is the extra job!!
        self.highscore = highscore
        otherlabel.text = "\(otherphrase) \(highscore)"
    }
}

希望它有所帮助。

答案 4 :(得分:0)

在这里开始你的高分:

 if let highscoreLast = HighscoreDefault.value(forKey: "highscore") {

    otherlabel.text = "\(otherphrase) \(highscore)"
    // you should get your highscore here               
    highscore = highscoreLast

    }

答案 5 :(得分:-1)

highscore必须是int而不是int的数组 你应该排序这个数组(升序或减少) 如果新得分>数组中最小的项目和array.count>您的核心默认值的计数 - >你按新分数改变了这个项目。并保存他们 if array.count<只需将newscore添加到数组并保存