как переопределить высокий балл в swift3

Мой код ниже вычисляет время реакции для игры. Подсчитывается общее время реакции totalTime. Прямо сейчас код экономит время реакции. Однако totalTimeвсегда равный высокий балл. Таким образом, не высокий балл сохраняется только текущий счет сохраняется. Я хотел бы, чтобы код сохранял самый низкийtotalTime, если он меньше текущего самого низкого totalTime.

import UIKit
class winViewController: UIViewController {
  @IBOutlet var score2: UILabel!
  @IBOutlet var winningLabel: UILabel!
  @IBOutlet var foxMill: UILabel!
  @IBOutlet var hhighscore: UILabel!

  public var LebelText: String?
  public var LebelText2: String?
  public var LebelText3: String?
  public var LebelText4: String?

  override func viewDidLoad() {
    super.viewDidLoad()
    timeCalculation()
    loadState()
  }

  func saveScore(score: Double) {
    // Instantiate user defaults
    let userDefaults:UserDefaults = UserDefaults.standard

    // Set your score
    userDefaults.set(score, forKey: "highScore")

    // Sync user defaults
    userDefaults.synchronize()
  }

  func loadState() {
    let userDefaults = UserDefaults.standard
    let score = userDefaults.double(forKey: "highScore")
    foxMill.text = "High Score: (score)"
  }

  func timeCalculation(){
    guard let unwrapedText = self.LebelText2 else { return }
    guard let unwrapedText2 = self.LebelText else { return }
    guard let unwrapedText3 = self.LebelText3 else { return }
    guard let unwrapedText4 = self.LebelText4 else { return }

    if let myInt = Double(unwrapedText), let myInt2 = Double(unwrapedText2), let myInt3 = Double(unwrapedText3), let myInt4 = Double(unwrapedText4) {
      var totalTime = myInt + myInt2 + myInt3 + myInt4
      self.winningLabel.text = "You won"+"n"+"Reaction time :" + String(totalTime) + " Seconds"

      guard let highScore = UserDefaults.standard.value("highScore") as? Double else { return }

      if totalTime > highScore {
        saveScore(score: totalTime)
      }
    }
  }
}

1 ответ

  1. Вы вызываете timeCalculationсначала в своем представлении did load, который вычисляет ваш «текущий рекорд», я полагаю, и вы сохраняете это в userdefaults. Но перед сохранением вы не проверяете, действительно ли это высокий балл. Вы должны добавить проверку состояния там.

    guard let highScore = UserDefaults.standard.value(forKey: "highScore") as? Double
    else{return}
    if totalTime>highScore{
        saveScore(score: totalTime)
    }