如何覆盖swift3中的高分
how to override a high score in 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)
}
}
}
}
你首先在你的视图中调用 timeCalculation
did load 计算你的 "current highscore" 我想你正在将它保存到 userdefaults。但是在保存之前,您不会检查它是否真的是最高分。您需要在此处添加条件检查。
guard let highScore = UserDefaults.standard.value(forKey: "highScore") as? Double
else{return}
if totalTime>highScore{
saveScore(score: totalTime)
}
我下面的代码计算了游戏的反应时间。总反应时间在 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)
}
}
}
}
你首先在你的视图中调用 timeCalculation
did load 计算你的 "current highscore" 我想你正在将它保存到 userdefaults。但是在保存之前,您不会检查它是否真的是最高分。您需要在此处添加条件检查。
guard let highScore = UserDefaults.standard.value(forKey: "highScore") as? Double
else{return}
if totalTime>highScore{
saveScore(score: totalTime)
}