我试图在多个视图和segues之间保存一个布尔值。我认为使用单子是答案。我设置了singleton类,但它仍然没有保存该值。
这是我开设的单打课。

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

    private init() { }

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

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

这就是我想说的。
默认情况下,我将变量设置为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 {
        ....}

问题是,当他们单击更改为Imperial,然后单击并移离该视图并返回到该视图时,它会将isOn重置为false并处理数据。我试着让伊森来拯救他们,所以当他们回来的时候,如果他们之前选择了它,它仍然是帝国的。任何提示/帮助将不胜感激。

最佳答案

你这样做不是很迅速

class Singleton {
  static var shared = Singleton()

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

接下来我不明白“复出”是什么意思。如果您将此视图/弹出窗口关闭为上一个视图,则问题是在设置子视图等时未在viewDidLoad中设置isOn状态。如果您按下某个viewcontroller并“返回”到切换器,则您可以在某个地方更改共享标志状态或在isOn/viewDidAppear或其他任何地方更改viewWillAppear。所以看看这个变种
希望我能帮忙!

关于swift - 如何快速实现单例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47082279/

10-11 10:28