将来自两个 @IBAction 函数的整数存储到 NSUserDefaults Swift

Store a integer from two @IBAction func into NSUserDefaults Swift

我是 Swift 的新手,已经坚持了一段时间。我认为这是由于对语言没有全面的了解,但我们将不胜感激。

我正在创建一个基本的门禁计数器(用于计算参加活动的人数)

var counterNumber = 0


@IBOutlet weak var counterLabel: UILabel!

一键加数

@IBAction func countUp(sender: UIButton) {
    counterNumber += 1
    counterLabel.text = "\(counterNumber)"
    var counterNumberAdd = counterLabel.text
    func saveCounterNumber(number:NSNumber){
        NSUserDefaults.standardUserDefaults().setObject(counterNumberAdd, forKey: "addcounterNumber")
        NSUserDefaults.standardUserDefaults().synchronize()
    }}

还有一个倒数

@IBAction func countDown(sender: UIButton) {
    let countersub: () = counterNumber -= 1
    counterLabel.text = "\(counterNumber)"
    var counterNumberSub = counterLabel.text
    func saveCounterNumber(number:NSNumber){
        NSUserDefaults.standardUserDefaults().setObject(counterNumberSub, forKey: "subcounterNumber")
        NSUserDefaults.standardUserDefaults().synchronize()
    }

}

我试图将计数存储在上面的 func 中,但我很难调用数据并创建一个函数来解析这两个变量并将其存储在应用程序的 NSUserDefaults 中。

  1. 您使用的是 NSUserDefaults,而不是 Core Data。
  2. 当您应该保存 counterNumber 时,您保存了标签的文本值
  3. 您的 IBAction 中有一个功能很无聊,甚至没有被调用。
  4. 如果你想做一个 1 加 1 减计数器,你不应该将它们保存为两个不同的 NSUserdefaults 值
  5. 不用每次都同步NSUserDefaults
  6. 如果您想在每次数字更新时更新您的标签,请使用 didSet 观察器。
  7. 如果你正在处理特定类型(即 Int),你可以使用 NSUserDefault 的 integerForKeysetIntegerForKey

将所有这些放在一起可以简化为:

@IBOutlet weak var numberLabel: UILabel!

var counterNumber: Int = NSUserDefaults.standardUserDefaults().integerForKey("counterNumber") {
    didSet {
        numberLabel.text = "\(self.counterNumber)"
    }
}

override func viewDidLoad() {
    super.viewDidLoad()
    numberLabel.text = "\(self.counterNumber)"
}

@IBAction func downButtonPressed(sender: UIButton) {
    NSUserDefaults.standardUserDefaults().setInteger(--counterNumber, forKey: "counterNumber")
}

@IBAction func upButtonPressed(sender: UIButton) {
    NSUserDefaults.standardUserDefaults().setInteger(++counterNumber, forKey: "counterNumber")
}