Использование синглтона использует значение из initWithCoder вместо создания нового экземпляра в Swift

У меня есть простая логическая переменная в функции, в которой установлен наблюдатель, чтобы проверить, когда она меняется:

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

Я установил его в false в init и затем в true в программе: инициализатор вызывается дважды, один раз для класса и один раз для подкласса, но я всегда проверяю значение в классе. Итак, я вижу, что переменная установлена ​​в true в наблюдателе, но затем, когда я проверяю ее в другой функции, я нахожу ее в false, когда наблюдатель больше не будет вызываться.

Как оказалось, проблема возникает из-за того, что я инициализирую два раза класс: один как одиночный, а другой с:

init?(coder aDecoder: NSCoder)

Конечно, я инициализирую синглтон с помощью:

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

Как я могу вернуть значение, сгенерированное из 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
}
Другие вопросы по тегам