Jei*_*Jei 1 xcode nsuserdefaults uikit ios swift
做了一个简单的增量游戏。我希望这样即使我转到不同的VC然后返回游戏或重新打开游戏,它也会显示当前分数。我的问题是,如果我离开游戏,那么分数将归零。我不希望这种情况发生。分数不应该被重置。我听说我可以使用 UserDefaults,但我根本不熟悉它。如果您可以使用代码进行解释,那将是最好的。谢谢。
import UIKit
class CookieClickerVC: UIViewController {
@IBOutlet weak var goldLabel: UILabel!
@IBOutlet weak var numberOfGold: UILabel!
@IBOutlet weak var getGoldButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
formatItems()
let defaults = UserDefaults.standard
defaults.set(0, forKey: "goldCount")
}
@IBAction func getGoldClicked(_ sender: Any) {
goldCount += 1
numberOfGold.text = ("\(goldCount)")
}`
Run Code Online (Sandbox Code Playgroud)
此外,您可能已经想通了,但是 goldCount 是一个未解析的标识符。单击按钮后我应该如何更改代码?
第 1 步:声明您的goldCount变量并将初始值设置为0
第 2 步:在 上viewDidLoad,获取存储在 中的值UserDefaults并将其设置为goldCount
第 3 步:同时更新您的标签
第 4 步:更新goldCountin的值userDefaults
import UIKit
class CookieClickerVC: UIViewController {
@IBOutlet weak var goldLabel: UILabel!
@IBOutlet weak var numberOfGold: UILabel!
@IBOutlet weak var getGoldButton: UIButton!
//Step1: declare your goldCount variable and set initial value to 0
var goldCount = 0
override func viewDidLoad() {
super.viewDidLoad()
formatItems()
//Step2: on viewDidLoad, get the value stored in the UserDefaults and set it to goldCount
goldCount = UserDefaults.standard.integer(forKey: "goldCount")
//Step3: then also update your label
numberOfGold.text = ("\(goldCount)")
}
@IBAction func getGoldClicked(_ sender: Any) {
goldCount += 1
numberOfGold.text = ("\(goldCount)")
//Step4: update the value of goldCount in userDefaults
UserDefaults.standard.set(goldCount, forKey: "goldCount")
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用这些funtions来获取和设置分数
class CookieClickerVC: UIViewController {
@IBOutlet weak var goldLabel: UILabel!
@IBOutlet weak var numberOfGold: UILabel!
@IBOutlet weak var getGoldButton: UIButton!
lazy var goldCount : Int = 0 {
didSet {
numberOfGold.text = ("\(goldCount)")
}
}
override func viewDidLoad() {
super.viewDidLoad()
formatItems()
goldCount = getScore()
}
@IBAction func getGoldClicked(_ sender: Any) {
goldCount += 1
savescore(goldCount)
}
// Save and Get methods ..
func saveScore(_ score:Int) {
let defaults = UserDefaults.standard
defaults.set(score, forKey: "goldCount")
// defaults.synchronize() its [unnecessary][1]
}
Run Code Online (Sandbox Code Playgroud)
// defaults.synchronize() 它是不必要的
func getScore()-> Int {
let defaults = UserDefaults.standard
return defaults.integer(forKey: "goldCount")
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
163 次 |
| 最近记录: |