首页 > 解决方案 > 如何在具有 3 位有效数字十进制值的 iOS 游戏中显示最佳时间?

问题描述

我正在使用以下功能在我的 iOS 游戏中节省最佳时间:-

func format(timeInterval: TimeInterval) -> String {
let interval = Int(timeInterval)
let seconds = interval % 60
let minutes = (interval / 60) % 60
let milliseconds = Int(timeInterval * 1000) % 1000
return String(format: "%02d:%02d.%03d", minutes, seconds, milliseconds)
}

func setBestTime(with time: Int){
    let defaults = UserDefaults.standard
    let previousBestTime = defaults.integer(forKey: "bestTime")
    defaults.set(time > previousBestTime ? time : previousBestTime, forKey: "bestTime")
}

func getBestTime(){
    self.bestTimeLabel.text = "\(UserDefaults.standard.integer(forKey: "bestTime"))"
}

func gameOver() {
stopGame()
setBestTime(with: Int(elapsedTime))
}

但是,它以整数显示最佳时间。我希望以 3 位有效数字以十进制显示最佳时间。谁能让我知道我该怎么做?谢谢您的帮助!

标签: iosswift

解决方案


你没有调用你的format函数。您只需要在将值显示在标签上之前将其IntUserDefaultto传递。format

UserDefaults.double如果你想存储 aTimeInterval而不是.你也应该使用Int

let defaults = UserDefaults.standard
let bestTimeKey = "bestTime"

func format(timeInterval: TimeInterval) -> String {
    let interval = Int(timeInterval)
    let seconds = interval % 60
    let minutes = (interval / 60) % 60
    let milliseconds = Int(timeInterval * 1000) % 1000
    return String(format: "%02d:%02d.%03d", minutes, seconds, milliseconds)
}

func setBestTime(with time: TimeInterval){
    let previousBestTime = defaults.double(forKey: bestTimeKey)
    defaults.set(max(time, previousBestTime), forKey: bestTimeKey)
}

func getBestTime() {
    let bestTime = defaults.double(forKey: bestTimeKey)
    let formattedBestTime = format(timeInterval: bestTime)
    bestTimeLabel.text = formattedBestTime
}

func gameOver() {
    stopGame()
    setBestTime(with: elapsedTime)
}

推荐阅读