让单例使用 initWithCoder 中的值而不是在 Swift 中创建新实例
Having a singleton use the value from initWithCoder instead of creating a new instance in Swift
我在一个函数中有一个简单的布尔变量,设置了一个观察者来检查它何时发生变化:
var userValid: Bool{
didSet{
let valid=userValid ? "valid" : "not valid"
print("uservalid changed to \(valid)")
}
}
我在 init 中将其设置为 false,然后在程序中将其设置为 true:初始化程序被调用两次,一次用于 class 一次用于 subclass 但我一直在检查class 中的值。所以我看到变量在观察者中设置为 true,但是当我在另一个函数中检查它时,我发现它为 false,而观察者不会再次被调用。
问题似乎源于我对 class 进行了两次初始化:一次作为单例,另一次使用:
init?(coder aDecoder: NSCoder)
当然我初始化单例:
public class func sharedMapDelegate() -> MapDelegate {
struct Static {
static let instance : MapDelegate = MapDelegate()
}
return Static.instance
}
如何 return 从 initWithCoder 生成的值而不是创建一个新值?
我想我已经通过将单例更改为以下内容来修复它:
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
}
我在一个函数中有一个简单的布尔变量,设置了一个观察者来检查它何时发生变化:
var userValid: Bool{
didSet{
let valid=userValid ? "valid" : "not valid"
print("uservalid changed to \(valid)")
}
}
我在 init 中将其设置为 false,然后在程序中将其设置为 true:初始化程序被调用两次,一次用于 class 一次用于 subclass 但我一直在检查class 中的值。所以我看到变量在观察者中设置为 true,但是当我在另一个函数中检查它时,我发现它为 false,而观察者不会再次被调用。
问题似乎源于我对 class 进行了两次初始化:一次作为单例,另一次使用:
init?(coder aDecoder: NSCoder)
当然我初始化单例:
public class func sharedMapDelegate() -> MapDelegate {
struct Static {
static let instance : MapDelegate = MapDelegate()
}
return Static.instance
}
如何 return 从 initWithCoder 生成的值而不是创建一个新值?
我想我已经通过将单例更改为以下内容来修复它:
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
}