2017-01-16 2 views
0

아래 코드는 게임 반응 시간을 계산합니다. 총 반응 시간은 totalTime으로 계산됩니다. 지금 코드는 반응 시간을 절약합니다. 그러나 totalTime은 항상 높은 점수와 같습니다. 따라서 현재 점수가 저장되면 높은 점수가 저장되지 않습니다. 현재 가장 낮은 코드 인 totalTime보다 작 으면 totalTime을 저장하는 코드를 원합니다. 당신은 당신의 "현재 최고 점수를"계산 부하를 한보기의 첫 timeCalculation를 호출하고swift3에서 높은 점수를 무시하는 방법

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) 
     } 
    } 
    } 
} 
+0

향상된 서식 지정 – budidino

답변

0

나는 가정 당신은 userdefaults에 있음을 절감하고 있습니다. 그러나 당신이 저축하기 전에 그것이 정말로 높은 점수인지 확인하지는 않습니다. 조건 검사를 추가해야합니다.

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

어떤 기능을 수행합니까? 시간 계산 또는 saveScore? –

+0

'timeCalculation'에서'saveScore (score : totalTime)'를 위의 코드로 대체하십시오. – ebby94

+0

또한'userDefaults.synchronize()'가 필요하지 않습니다. – ebby94

관련 문제