在 SWIFT 中关闭 segue 之前保存变量



我的应用程序中有 VC(不是根 VC(,单击按钮后我不会在那里添加框。添加工作正常。我的var在另一个模型swift文件中(av = ActualValues(((。默认 var 为 0,每次我关闭 VC 时,var 都会恢复为值 0。我该如何解决它?用户默认值不起作用:/那是我的代码 实际值(查看变量数量(:

import Foundation
import Firebase

class ActualValues {
var id = "not changed"
var databaseID = "not changed"
var shift = 1
var product: String?
var target: Int = 0
var issueNumber: String?
var issue: String?
var issueNote: String?
var breakNumber: String?
var customer: String?
var quantity: Int = 0
var teamLeader: String?
var numberOfPeople: String?
var numberOfRejects = "0"
var reasonOfRejects: String?
var endNote: String?
var podType: String = "Not selected"
var typeOfWork = "not specified"
...

和统计数据:

import UIKit
class CurrentStatsViewController: UIViewController {
var av = ActualValues()
var defaultsQuantity = UserDefaults.standard.integer(forKey: "quantity")
@IBOutlet weak var menuButton: MyButton!
@IBOutlet weak var boxButton: MyButton!
@IBOutlet weak var rejectButton: MyButton!
//Labels
@IBOutlet weak var planLabel: UILabel!
@IBOutlet weak var actualLabel: UILabel!
@IBOutlet weak var rejectsLabel: UILabel!
@IBOutlet weak var effLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
menuButton.isEnabled = true
boxButton.isEnabled = true
rejectButton.isEnabled = true
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
planLabel.text = "(av.target)"
actualLabel.text = "(av.quantity)"
}
@IBAction func menuButtonTapped(_ sender: MyButton) {
self.dismiss(animated: true, completion: nil)
}
@IBAction func boxButtonTapped(_ sender: MyButton) {
addQuantity()
}
@IBAction func rejectsButtonTapped(_ sender: MyButton) {
}
//FUNC
func addQuantity() {
av.quantity = (av.quantity + 1)
actualLabel.text = "(av.quantity)"
print(av.quantity)
}
}

每次关闭 segue 时如何保存 var,如果我回到这个 VC,我会加载最后一个数字?

您可以使用 UserDefaults 来保存和加载数据。下面是 int 的示例:

UserDefaults.standard.set(3, forKey: "myKeyName")

若要加载值,请使用类似的方法。但是,请注意,类型是在函数调用中指定的。

UserDefaults.standard.integer(forKey: "myKeyName")

我还建议使用结构来存储键,因为这提供了额外的类型安全层。

struct UserDefaultKey {
static let myInt = "myKeyName"
}

如果使用 segue,则可以使用以下方法在 segue 发生之前处理任何数据:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
super.prepare(for: segue, sender: sender)
// Save your data here
UserDefaults.standard.set(3, forKey: UserDefaultKey.myInt)
}

我也会考虑使用单例类。

相关内容

  • 没有找到相关文章

最新更新