您可以编写protocol 来设置默认百分比,并让您的MainViewController 符合该协议。当用户点击SettingsViewController 中的按钮时,您可以调用一个函数(在协议中定义)让“委托”(MainViewController)知道发生了什么,并相应地设置您的default 变量。如果这是一个永久设置,最好使用UserDefaults,因为这正是它的设计目的。然后,在加载 MainViewController 后,您可以访问该 UserDefaults 变量(如果存在)。
一点协议帮助:
您的协议可以非常简单地定义 - 类似这样(这必须在您的 viewControllers 之外声明 - 我经常在相关 viewController 的类声明之上这样做):
protocol SettingsDelegate {
func didUpdateDefaultTipPercent(to percent: Float)
}
协议声明就是这样,除非您预计需要其他功能。请注意,您实际上并没有定义该函数的功能 - 每个符合协议的 viewController 可能有不同的定义。
然后,在您的 settingsViewController 中,您可能有一个用于协议遵循者的可选变量,如下所示:
weak var settingsDelegate: SettingsDelegate?
在用户选择默认百分比后,您可以安全地检查委托是否存在并将新数字传递给委托,如下所示:
if let delegate = self.settingsDelegate {
delegate.didUpdateDefaultTipPercent(to: 15.0) //this "15.0" will come from your segmented control action or whatever
}
在您的MainViewController 中,在您的prepareFor(segue... 中,您需要检查是否要进行设置,并将Main 设置为代表:
...
if let settings = segue.destination as? SettingsViewController {
settings.settingsDelegate = self
}
最后,您需要使您的MainViewController 符合协议。我通常将其作为扩展名,以便更容易找到,并使其与其他事物分开:
extension MainViewController: SettingsDelegate {
func didUpdateDefaultTipPercent(to percent: Float) {
self.defaultPercentage = percent
}
}