需要创建一个 userdefault 来保存 double 作为高分 (swift 3)
need to create a userdefualt that saves a double as a high score (swift3)
我希望标签 foxmill 使用用户默认值存储高分。显然,如果有新的高分,我希望将其替换。问题是 totalTime(跟踪分数的)是双精度而不是整数。所有教程都使用 int 作为高分教程。
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"
saveScore(score: totalTime)
}}}
您只需使用正确的密钥保存该值,然后在检索它时,确保以 Double
:
的形式进行
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()
}
现在,当您更新分值时,当您说 ... (unwrappedText
) 时,请确保保存用户默认值
if let myInt = Double(unwrapedText), let myInt2 = Double(unwrapedText2), let myInt3 = Double(unwrapedText3), let myInt4 = Double(unwrapedText4)
// HERE you do whatever it was you originally did with the text, but also save a value
saveScore(score: myInt)
{
现在,下次加载应用时,加载乐谱:
func loadScore() {
// Instantiate User Defaults
let userDefaults = UserDefaults.standard
let score = userDefaults.double(forKey: "highScore")
}
当你想让 Double
而不是 Integer
时,你真的不应该命名 属性 "myInt"
如果您希望 foxMill
标签在加载时显示此高分,您需要做两件事。首先确保在应用程序关闭之前,通过同步 UserDefaults
来保存状态,查看 AppDelegate
中的 applicationDidEnterBackground
和 applicationWillTerminate
之类的方法 - 但这有点超出你的问题范围。现在,我假设您已通过调用上面列出的 saveScore(score:)
函数正确保存了上次应用程序退出时的状态。所以现在您想要检索分数并在加载时更新 foxMill
标签。你会做这样的事情:
你可以通过修改上面的 loadScore
方法来做这样的事情:
func loadScore() {
// Instantiate User Defaults
let userDefaults = UserDefaults.standard
let score = userDefaults.double(forKey: "highScore")
foxMill.text = "High Score: \(score)"
}
然后在 viewDidLoad
的结尾:
override func viewDidLoad() {
super.viewDidLoad()
loadScore()
}
或者您可以将方法更改为 return 一个字符串,然后将其分配给标签的文本:
func loadScore() -> String {
// Instantiate User Defaults
let userDefaults = UserDefaults.standard
let score = userDefaults.double(forKey: "highScore")
return "High Score: \(score)"
}
然后在 viewDidLoad
:
override func viewDidLoad() {
super.viewDidLoad()
foxMill.text = loadScore()
}
我希望标签 foxmill 使用用户默认值存储高分。显然,如果有新的高分,我希望将其替换。问题是 totalTime(跟踪分数的)是双精度而不是整数。所有教程都使用 int 作为高分教程。
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"
saveScore(score: totalTime)
}}}
您只需使用正确的密钥保存该值,然后在检索它时,确保以 Double
:
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()
}
现在,当您更新分值时,当您说 ... (unwrappedText
) 时,请确保保存用户默认值
if let myInt = Double(unwrapedText), let myInt2 = Double(unwrapedText2), let myInt3 = Double(unwrapedText3), let myInt4 = Double(unwrapedText4)
// HERE you do whatever it was you originally did with the text, but also save a value
saveScore(score: myInt)
{
现在,下次加载应用时,加载乐谱:
func loadScore() {
// Instantiate User Defaults
let userDefaults = UserDefaults.standard
let score = userDefaults.double(forKey: "highScore")
}
当你想让 Double
而不是 Integer
如果您希望 foxMill
标签在加载时显示此高分,您需要做两件事。首先确保在应用程序关闭之前,通过同步 UserDefaults
来保存状态,查看 AppDelegate
中的 applicationDidEnterBackground
和 applicationWillTerminate
之类的方法 - 但这有点超出你的问题范围。现在,我假设您已通过调用上面列出的 saveScore(score:)
函数正确保存了上次应用程序退出时的状态。所以现在您想要检索分数并在加载时更新 foxMill
标签。你会做这样的事情:
你可以通过修改上面的 loadScore
方法来做这样的事情:
func loadScore() {
// Instantiate User Defaults
let userDefaults = UserDefaults.standard
let score = userDefaults.double(forKey: "highScore")
foxMill.text = "High Score: \(score)"
}
然后在 viewDidLoad
的结尾:
override func viewDidLoad() {
super.viewDidLoad()
loadScore()
}
或者您可以将方法更改为 return 一个字符串,然后将其分配给标签的文本:
func loadScore() -> String {
// Instantiate User Defaults
let userDefaults = UserDefaults.standard
let score = userDefaults.double(forKey: "highScore")
return "High Score: \(score)"
}
然后在 viewDidLoad
:
override func viewDidLoad() {
super.viewDidLoad()
foxMill.text = loadScore()
}