我是Xcode的新手,目前正在制作应用程序,你有一定数量的“香蕉/钱”,你可以翻转硬币,你要么赢2倍,要么输掉你的赌注。 (仅限经验)
我的游戏完全正常运行,我现在刚刚决定,我想在应用关闭和启动时保存货币;使用NSUserDefaults。
我已经设置了我的NSUserDefaults,它正在运行。它显示的是我上次关闭应用时的货币,我只能在0和我的货币之间下注。 - 哪个好极了!
然而,即使我的全部货币正在显示,而且我可以下注所有的总货币,但这背后的数学仍然在挣扎。 应用程序关闭后,它将整数放回0,因为这是我在创建变量时声明的上面的viewDidLoad。
有没有理解?假设我有30个香蕉,我打算打30个香蕉。如果我赢了,我将共有30个禁令,如果我输了,我将有-30个香蕉。 (整数由于某种原因设置为0)
我需要一种方法将整数设置为我上次保存的; “currencySave”。 - 我需要一种方法来检测它是否是第一次打开应用程序;如果是的话,你必须从一个恒定的整数/货币开始。
代码:
我的所有变量都是整数。
betVar; the variable / value, that you're betting
currencyVar; the variable / value, that you're having. (Your cash)
currencySave; the name I've saved my integer into
以上viewDidLoad
let defaults = UserDefaults.standard
var currencyVar = Int(0)
var betVar = Int(0)
viewDidLoad中
let currencyVar = defaults.integer(forKey: "currencySave")
labelCurrency.text = String("$ \(currencyVar)")
betVar = 0
labelBet.text = String("$ \(betVar)")
滑块,您选择下注金额
let currencyVar = defaults.integer(forKey: "currencySave")
let currentValue:String = String(Int(sender.value))
betVar = Int(currentValue)!
labelBet.text = currentValue
labelSlider.maximumValue = Float(currencyVar)
labelSlider.minimumValue = Float(0)
labelBet.text = String("$ \(currentValue)")
赢得赌注时的数学(当你点击'下注'时,它需要你的钱,这意味着,如果你输了,什么也不会发生。)
self.currencyVar = self.currencyVar + self.betVar*2
self.labelBet.text = String("\(self.betVar*2)")
self.labelBet.textColor = UIColor.green
我保存整数的方法
defaults.set(currencyVar, forKey: "currencySave")
defaults.synchronize()
答案 0 :(得分:0)
看起来您正在创建具有相同名称的局部变量,因此忽略该属性。
在顶级声明
var currencyVar = 0 // the compiler infer the Int type.
在viewDidLoad
删除let
self.currencyVar = defaults.integer(forKey: "currencySave")
在 Slider中,你... 只使用实例变量,删除整行
let currencyVar = defaults.integer(forKey:" currencySave")
并添加self
(虽然不是必需的)以表明该属性。
labelSlider.maximumValue = Float(self.currencyVar)