这有点让我头疼。基本上我想要有两个不同的单例,它们都继承自同一个类。在任何一个单例中,我都想使用某个类,该类本身是派生的。所以我有一个
Utility
,并且有AUtil:Utility
和BUtil:Utility
。还有一个Singleton
,分别使用AUtility
和BUtility
作为ASingleton
的背景。我在所有方面都失败了。最后一次尝试是一个工厂模式,但只会让Swift 1.2崩溃:protocol Initializable { init() }
class A:Initializable {
var x = "A"
required init() {}
}
class B:Initializable {
var x = "B"
required init() {}
}
class C {
let t:Initializable
init(t:Initializable) {
self.t = t
println(t)
}
func factory() {
println(t.dynamicType())
}
}
就像我所说的那样,我还尝试将以下模式设置为通用模式:
private let _SingletonSharedInstance = StaticClass()
class StaticClass {
class var sharedInstance : StaticClass {
return _SingletonSharedInstance
}
}
let s = StaticClass.sharedInstance
这个句子并不是通用的,但是我的所有尝试都失败了,所以我展示了我的起点。
无论如何,我似乎陷入了末日和死亡之间的迷失中。
flatMap
的原因是什么?似乎if let o = (instances[name] as? T )
也可以工作。我不得不查找这个新方法,因为它是最新的1.2 beta版本之一的新方法。 - qwerty_soif let
可以解包一个双重包装的可选值Initializable??
。谢谢! - findall