如何在swift中实现Singleton

时间:2017-11-02 18:29:34

标签: swift singleton global-variables

我想在多个视图和联赛中保存一个布尔值。我认为使用单身就是答案。我设置了单例类,但它仍然没有保持该值。 这是我设置的Singleton类。

class Singleton {
    static let instance = Singleton()
    var data: Bool = false;

    private init() { }

    func SetData(value: Bool){
        data = value
    }

    func GetData() -> Bool{
        return data
    }
}

这是我试图称之为的地方。 默认情况下,我将var isOn设置为false。如果为true,则将用户数据设置为Imperial系统,如果为false则将其设置为Metric。

//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 {
        ....}

问题在于,当他们点击更改为Imperial时,然后单击并远离该视图并返回到它,它会将isOn重置为false并与数据混淆。我试图让isOn保存,所以当他们回来时,如果他们之前选择它,它仍然会在Imperial上。任何提示/帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

你不是以类似Swift的方式做到这一点

class Singleton {
  static var shared = Singleton()

  var data: Bool = fasle {
    get { return data }
    set { data = newValue }
  }
}

接下来我不明白它意味着什么"复出"。如果您取消此视图/ poped到上一个视图,那么问题是您在设置子视图时没有在viewDidLoad中设置isOn状态,依此类推。如果你推动someViewController和"复出"在您的切换台上,您可以在某处更改共享标记状态,或在isOn / viewDidAppear或其他任何位置更改viewWillAppear。所以检查这个变种

希望我帮忙!