Использование синглтона использует значение из 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
}