swift - 如何在swift中实现单例

标签 swift singleton global-variables

我正在尝试跨多个 View 和 seagues 保存一个 bool 值。我认为使用单例就是答案。我设置了单例类,但它仍然没有保持该值。 这是我设置的单例类。

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。如果为真,则将用户数据设置为英制系统,如果为假,则设置为公制。

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

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

最佳答案

你不是以类似 Swift 的方式来做的

class Singleton {
  static var shared = Singleton()

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

接下来我不明白“卷土重来”是什么意思。如果您关闭此 View /弹出到上一个 View ,那么您的问题是您在设置 subview 等时没有在 viewDidLoad 中设置 isOn 状态。如果你将 someViewController 推到你的切换器然后“回来”,那么你在某个地方改变了共享标志状态或改变 viewDidAppear/viewWillAppear 或其他任何地方的 isOn。所以检查这个变体

希望我有所帮助!

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

相关文章:

ios - 使用未解析的标识符 CNContact [swift 3]

asp.net - VB.Net 使用 System.Reflection 和 System.Type 初始化类以创建基于 session 的单例扩展方法

PHP 面向对象 : Avoid Singleton/Static Methods in Domain Model Pattern

java - 重新部署带有计时器任务的单例

php返回全局变量

c++ - 在 C++ 的头文件中使用全局变量 'extern' 的编译器错误

ios - 使用 Swift 中的 block 调用 Objective C 方法

xcode - Swift 中的简单程序。这是如何固定的?

powershell - 在PowerShell中使用全局变量的最佳方法?

ios - 防止tableview单元格回收标签值