如何在打开应用程序时更改/提升旧变量?

时间:2017-07-15 17:42:46

标签: ios swift swift3

我是Swift的新手并且已经尝试过搜索这个主题,但我不知道它是如何被调用的,所以我现在就问它。我想制作一种Cookie Clicker。每次按下按钮都会有更多的钱。 当我打开应用程序时,我已经设法保存“钱”,但现在我想在点击按钮时添加到“旧”钱。有谁知道怎么做?

这是我的代码:

import UIKit
import AVFoundation

var employers = 0
var money = 0

class ViewController: UIViewController {

    @IBOutlet var score: UILabel!
    @IBOutlet var moneysecond: UILabel!
    @IBOutlet var employees: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    @IBAction func clickbutton(_ sender: Any) {
        money = money + 20
        score.text = "$\(money).-"

        UserDefaults.standard.set(score.text, forKey: "dollar")
        score.text = "$\(money).-"
    }

    override func viewDidAppear(_ animated: Bool) {
        if let x = UserDefaults.standard.object(forKey: "dollar") as? String {
            score.text = x
        }
    }
}

enter image description here

2 个答案:

答案 0 :(得分:1)

不要将部分 String存储到UserDefaults中,而是存储money的实际值,例如Int。并且最初设定货币价值。

现在您将显示的文本设置为您存储的值,然后单击并增加一个money变量,该变量没有任何来处理从UserDefaults读取的值因此,您将丢失上次应用程序运行期间之前设置的信息。

提案:

  • money移至ViewController
  • 更改viewDidLoad以将UserDefaults.standard.integer(forKey: "dollar")的值读入money
  • {li}在viewDidAppear中使用money的值来设置文字
  • clickbutton中移除了第一个或第二个score.text作业,但不在score.text
  • 中存储money而是UserDefaults

答案 1 :(得分:0)

实际上这与luk2302的建议相同,但在代码中

class ViewController: UIViewController {

    @IBOutlet var score: UILabel!
    @IBOutlet var moneysecond: UILabel!
    @IBOutlet var employees: UILabel!

    var money = 0
    var employers = 0

    override func viewDidLoad() {
        super.viewDidLoad()
        money = UserDefaults.standard.integer(forKey: "dollar")
    }


    @IBAction func clickbutton(_ sender: Any) {
        money = += 20
        score.text = "$\(money).-"
        UserDefaults.standard.set(money, forKey: "dollar")

    }
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        score.text = "$\(money).-"
    }
}