【问题标题】:how to override a high score in swift3如何在swift3中覆盖高分
【发布时间】:2017-01-16 02:58:34
【问题描述】:

我下面的代码计算了游戏的反应时间。总反应时间以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)
      }
    }
  }
}

【问题讨论】:

  • 改进格式

标签: ios swift swift3 save nsuserdefaults


【解决方案1】:

您首先调用timeCalculation 在您的视图中确实加载了计算您的“当前高分”,我想您将其保存到用户默认值。但在你保存之前,你并没有检查它是否真的是高分。您需要在此处添加条件检查。

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

【讨论】:

  • 我把守卫放在什么功能上?及时计算还是saveScore?
  • 在您的timeCalculation 中,只需将saveScore(score: totalTime) 替换为上述代码即可。
  • 你也不需要userDefaults.synchronize()
  • 不工作它告诉我参数标签不匹配任何可用的重载。我根据您的建议编辑了我的问题。
猜你喜欢
  • 1970-01-01
  • 2018-03-16
  • 1970-01-01
  • 1970-01-01
  • 2012-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多