Swift UserDefaults (2017)

Posted

技术标签:

【中文标题】Swift UserDefaults (2017)【英文标题】: 【发布时间】:2017-03-01 13:38:46 【问题描述】:

我是 Xcode 的新手,目前正在制作一个应用程序,你有一定数量的“香蕉/金钱”,你可以在其中掷硬币,要么赢 2 倍,要么输掉赌注。 (仅供体验)

我的游戏可以正常运行,我现在刚刚决定,我想在应用关闭和启动时保存货币;使用 NSUserDefaults。

我已经设置了我的 NSUserDefaults,它正在工作。它显示的是我上次关闭应用程序时的货币,我只能在 0 和我的货币之间下注。 - 太棒了!

但是,即使我的全部货币都显示出来了,而且我可以下注我所有的总货币,这一切背后的数学仍然很困难。 应用程序关闭后,它会将整数放回 0,因为这是我在创建变量时在 viewDidLoad 上方声明的内容。

不明白?假设我有 30 根香蕉,我将赌 30 根香蕉。如果我赢了,我总共有 30 根香蕉,如果我输了,我将有 -30 根香蕉。 (整数由于某种原因设置为0)

我需要一种将整数设置为我上次保存的方法; “货币保存”。 - 我需要一种方法来检测是否是第一次打开应用程序;如果是,则必须从常量整数/货币开始。

代码:

我所有的变量都是整数。

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()

【问题讨论】:

【参考方案1】:

看起来您正在创建具有相同名称的局部变量,因此该属性被忽略。

在顶层声明

var currencyVar = 0 // the compiler infer the Int type.

viewDidLoad删除let

self.currencyVar = defaults.integer(forKey: "currencySave")

Slider,你...只使用实例变量,删除整行

让currencyVar = defaults.integer(forKey: "currencySave")

并添加self(尽管不是必需的)以指示属性。

labelSlider.maximumValue = Float(self.currencyVar)

【讨论】:

谢谢!非常感谢您的快速回复。它真的帮助了我,现在它完全有效。现在我手头有一个经验丰富的程序员。如果我想建立某种统计系统怎么办?我可以在哪里看到下注、最佳赢奖等等。我正在考虑制作一个独特的 Userdefaults 关键字,每次都会添加一个;一个变量? - 你会得到我的名誉,如果我能找到一些尊重你的方式。 对于收集大量数据的统计系统,我更喜欢 Core Data。 只有这3-4个统计数据,并没有成为图表或其他东西。但如果你这么说,我会用谷歌搜索 Core Data,谢谢你的回答!

以上是关于Swift UserDefaults (2017)的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3 UserDefaults 设置 NSMutableArray

iOS Swift 将领域对象存储到 UserDefaults.standard

userdefaults 使用问题 swift 3

如何使用 userDefaults 保存打印数组(swift 3)

Swift 3 - UserDefaults 无缘无故自动清除

从其他 viewController 访问 Swift 中的 UserDefaults