在 iOS 应用中设置播放器的最佳时间



我使用了用户默认值来节省玩家的最佳时间。现在,我只能通过使用以下代码来保存玩家最后一次玩游戏的时间。我希望时间是最好的时间,只有当它比以前的时间更多(更大(。有人能告诉我该怎么做吗?将感谢您的帮助!谢谢

func setBestTime(with time:String){
let defaults = UserDefaults.standard
defaults.set(time, forKey: "bestTime")

}
func getBestTime(){
let defaults = UserDefaults.standard

if let time = defaults.value(forKey: "bestTime") as? String {
self.bestTimeLabel.text = "Best Time: (time)"
}
}

首先,您应该将最佳时间存储为Double,因为在这里可以更容易地执行您想要的操作。然后你所要做的就是将存储的值与新值进行比较,以确定要存储的值:

func setBestTime(with time: Double){
let defaults = UserDefaults.standard
let previousBestTime = defaults.double(forKey: "bestTime")
defaults.set(time > previousBestTime ? time : previousBestTime, forKey: "bestTime")
}
func getBestTime(){
self.bestTimeLabel.text = "Best Time: (UserDefaults.standard.double(forKey: "bestTime"))"
}

我宁愿将时间存储为数字(如Int或Double(。这可以让你(轻松地(比较时间,这对你的目标很有用。

此外,我建议您保持get和set函数的简单性,而不是让它们同时做一些与UI相关的事情。

所以,你的获取和设置功能可能是这样的:

func setBestTime(with time: Double) {
let defaults = UserDefaults.standard
defaults.set(time, forKey: "bestTime")
}
func getBestTime() -> Double? {
let defaults = UserDefaults.standard

if let time = defaults.value(forKey: "bestTime") as? Double {
return time
}
return 0.0 // If there is no time stored, return some default value. 
}

正如你所看到的,他们所做的一切都没有你从他们的名字中所期望的那样。

因此,现在您只想保存新时间,如果它大于保存的时间。如何做到这一点,取决于您在其余代码中调用这些函数的位置。你可以这样做:

// Setup
let oldBest = getBestTime()
self.bestTimeLabel.text = "Best Time: (oldBest)"
// After the player has played a game
// I assume you get the new time from somewhere
let newTime = ...
// Set new best if applicable
if newTime > oldBest {
// So, the player has a new best, let's save that
setBestTime(with: newTime)
// Make the UI display that new best time
self.bestTimeLabel.text = "Best Time: (newTime)"
}

希望这能激励你!

最新更新