如何在 swift 中实现 Singleton



我正在尝试在多个视图和 seague 中保存布尔值。我认为使用单例就是答案。我设置了单例类,但它仍然没有保持该值。这是我设置的单例类。

class Singleton {
    static let instance = Singleton()
    var data: Bool = false;
    private init() { }
    func SetData(value: Bool){
        data = value
    }
    func GetData() -> Bool{
        return data
    }
}

这就是我试图称之为它的地方。默认情况下,我将变量设置为假。如果为 true,则将用户数据设置为英制系统,如果为 false,则设置为公制。

//This is the function for the button that lets the user switch between the metric system and imperial system
@IBAction func switchMeasurements(_ sender: Any) {
    var temperatureS: Float = Float(0)
    var temperatureB: Float = Float(0)
    var lakeDep: Float = Float(0)
    isOn = Singleton.instance.GetData()
    //Clicks the button, if isOn is true then we set the data to the imperial system.
    isOn = !isOn
    Singleton.instance.SetData(value: isOn)
    if isOn {
        ....}

问题是,当他们单击以更改为英制,然后单击并离开该视图并返回该视图时,它会将isOn重置为false并弄乱数据。我正在尝试让isOn保存,所以当他们回来时,如果他们之前选择了它,它仍然会在帝国。任何提示/帮助将不胜感激。

你不是以类似 Swift 的方式这样做

class Singleton {
  static var shared = Singleton()
  var data: Bool = fasle {
    get { return data }
    set { data = newValue }
  }
}

接下来我不明白"复出"是什么意思。如果您关闭此视图/弹出到上一个视图,那么您的问题是您在设置子视图等时没有在 viewDidLoad 中设置isOn状态。如果您推送某个ViewController并"返回"到切换器,那么您会在某个地方更改共享标志状态或更改viewDidAppear/viewWillAppear或其他任何地方的isOn。所以检查这个变体

希望我有帮助!

相关内容

  • 没有找到相关文章

最新更新