【问题标题】:Having a singleton use the value from initWithCoder instead of creating a new instance in Swift让单例使用 initWithCoder 中的值,而不是在 Swift 中创建新实例
【发布时间】:2017-01-26 01:40:47
【问题描述】:

我在一个函数中有一个简单的布尔变量,观察者在该变量上设置了一个观察者来检查它何时发生变化:

var userValid: Bool{
    didSet{
        let valid=userValid ? "valid" : "not valid"
        print("uservalid changed to \(valid)")
    }
}

我在 init 中将其设置为 false,然后在程序中将其设置为 true:初始化器被调用两次,一次用于类,一次用于子类,但我总是检查类中的值。所以我看到变量在观察者中设置为 true,但是当我在另一个函数中检查它时,我发现它为 false,而观察者不再被调用。

问题似乎源于我初始化了两次类:一次是单例,另一次是:

init?(coder aDecoder: NSCoder)

当然,我用以下方式初始化单例:

public class func sharedMapDelegate() -> MapDelegate {
    struct Static {
        static let instance : MapDelegate = MapDelegate()
    }
    return Static.instance
}

如何返回从 initWithCoder 生成的值而不是创建一个新值?

【问题讨论】:

    标签: singleton swift3 observers initwithcoder


    【解决方案1】:

    我想我已经通过将单例更改为:

    public class func sharedMapDelegate() -> MapDelegate {
        struct Static {
            static var instance : MapDelegate {
                if let me = Factory.sharedFactory().mapHandler {
                    return me
                } else {
                    Factory.sharedFactory().mapHandler=MapDelegate()
                    return Factory.sharedFactory().mapHandler
                }
            }
        }
        return Static.instance
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-10
      • 1970-01-01
      • 2013-09-04
      相关资源
      最近更新 更多