使用单例使用initWithCoder中的值而不是在Swift

时间:2016-09-18 06:56:29

标签: singleton swift3 observers initwithcoder

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

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生成的值而不是创建新值?

1 个答案:

答案 0 :(得分:0)

我想我已经通过将单身人士改为:

来修复它
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
}