我的应用程序实现了一个导航栏:它有一个主视图和一个设置视图。在设置视图中,我使用UserDefaults保存了一些用户的首选项。然后,当我返回主视图时,不会出现新的首选项。它只在我重新打开应用程序后出现。我在ViewController的viewDidLoad方法中加载用户默认值。从设置视图返回到主视图后,看起来不会再次调用viewDidLoad方法。那么我应该从哪里加载来自用户默认值的数据呢?
以下是我加载首选项的方法:
override func viewDidLoad() {
super.viewDidLoad()
numberOfPeople = defaults.double(forKey: "numberOfPeopleDefault")
tipPercentage = defaults.double(forKey: "tipPercentageDefault") / 100.0
}
你可以在viewWillAppear
中调整变量(每次出现ViewController
时调用),例如:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
numberOfPeople = defaults.double(forKey: "numberOfPeopleDefault")
tipPercentage = defaults.double(forKey: "tipPercentageDefault") / 100.0
}
我想你会发现在为你的变量使用didSet时有一些价值。这是一个你可能会觉得有用的例子。
class vc: UIViewController {
var numpplLabel: UILabel!
var tipLabel: UILabel!
var numberOfPeople: Double = 0 {
didSet {
guard oldValue != numberOfPeople else { return }
numpplLabel.text = "\(numberOfPeople) ppl"
}
}
var tipPercentage: Double = 0.2 {
didSet {
guard oldValue != tipPercentage else { return }
tipLabel.text = "\(tip)% tip"
}
}
var tip: Double { return tipPercentage*100 }
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
numberOfPeople = defaults.double(forKey: "numberOfPeopleDefault")
tipPercentage = defaults.double(forKey: "tipPercentageDefault")
}
}