如何在swift3中覆盖高分

Posted

技术标签:

【中文标题】如何在swift3中覆盖高分【英文标题】:how to override a high score in 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)
      
    
  

【问题讨论】:

改进格式 【参考方案1】:

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

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

【讨论】:

我把守卫放在什么功能上?及时计算还是saveScore? 在您的timeCalculation 中,只需将saveScore(score: totalTime) 替换为上述代码即可。 你也不需要userDefaults.synchronize() 不工作它告诉我参数标签不匹配任何可用的重载。我根据您的建议编辑了我的问题。

以上是关于如何在swift3中覆盖高分的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3 如何覆盖静音模式并从后台播放音频

IOS Swift3卡栈覆盖

Swift 3:通过覆盖 SKView 在 SpriteKit 中制作暂停菜单?

高分卫星数据查询-怎样用SHP文件导入的方法查询遥感影像

关于SetWindowPos的窗口排序的问题!(高分)

PSP2000会用CTF主题的进来!高分求助!