我正在制作一个天气应用程序,目前我正在添加支持从帝国度量切换到米制,但是当你从设置视图控制器切换到主菜单到天气查看器时,它会将单元变量重置为帝国。
我看过许多问题和文章,或者:
========================================================================
注意:我正在使用segue来切换VCs。
@IBAction func unitSwitcherMetric(_ sender: UIButton) {
weatherDataModel.unit = "metric"
weatherDataModel.windUnit = ""
print("The unit is now \(weatherDataModel.unit)")
}选择该按钮后,它会按预期的方式打印The unit is now metric,但是当切换到主菜单视图控制器(它应该打印单元变量)时,它会打印imperial,API也会提供帝国度量。
发布于 2019-06-13 21:40:44
您可以实现Singleton,它是一个只有一个实例的类,用于不同用途的内存中。您可以这样实现它:
class MetricManager {
static let sharedInstance = MetricManager()
var currentUnit: String = "imperial"
private init() {
}
}之后,您可以简单地在Settings上分配一个值,如下所示
@IBAction func unitSwitcherMetric(_ sender: UIButton) {
MetricManager.sharedInstance.currentUnit = "metric"
}然后在菜单上或者任何你想得到当前单位值的地方,你只需参考它:
MetricManager.sharedInstance.currentUnit发布于 2019-06-14 04:45:02
有几个想法:
UserDefaults中保存用户的首选项,例如:
结构参数{ temperatureUnitKey = "customTemperatureUnitKey“var unitTemperature: CustomUnitTemperature { didSet {didSet{ forKey: temperatureUnitKey) } init() { unitTemperature = UserDefaults.standard.string(forKey: temperatureUnitKey) .flatMap { CustomUnitTemperature(rawValue:$0) } ??.celsius }
然后您可以有一个preferences对象:
var preferences = Preferences()
然后,您可以像这样将unitTemperature读写到首选项(这将在应用程序运行期间保持不变)。例如阅读:
设单元= preferences.unitTemperature开关单元{ case .celsius:.案例.fahrenheit:.}
或者,更改/保存值:
preferences.unitTemperature = .fahrenheit
说到底,它是一个属性,它是通过从UserDefaults读取并在设置属性时在UserDefaults中更新而初始化的。UnitTemperature类型。有关如何使用此文档类型的信息,请参阅文档或WWDC 2016视频测量和单位。
无论如何,在iOS 10和更高版本中,我可能会定义我的Preferences类型来使用这个UnitTemperature类型访问和保存,但是将symbol保存到UserDefaults:
结构参数{ temperatureUnitKey = "temperatureUnitKey“var unitTemperature: UnitTemperature { didSet {didSet{ forKey: temperatureUnitKey) } init() { unitTemperature = UserDefaults.standard.string(forKey: temperatureUnitKey) .map {UnitTemperature(符号:0)} ??.celsius }
然后您可以以同样的方式访问它(尽管我们的switch现在需要一个default子句,因为celsius和fahrenheit不是唯一可接受的值:
设单元= preferences.unitTemperature开关单元{ case .celsius:.案例.fahrenheit:..。默认值:.}
更新首选项是相同的:
preferences.unitTemperature = .fahrenheithttps://stackoverflow.com/questions/56588736
复制相似问题