如何在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中覆盖高分的主要内容,如果未能解决你的问题,请参考以下文章