我对您将问题标记为单例感到有些不安全,但基本上您提供的代码与单例完全无关,因此我尝试模仿您的原始类并在此处显示一些选项。
这些是用Swift 2.2编写的。
情况1
最初完美无缺:
class BaseClass {
class func task() -> BaseClass {
return BaseClass()
}
// ...
}
class ChildClass : BaseClass {
override class func task() -> ChildClass {
return ChildClass()
}
// ...
}
那么你就可以得到这样的实例:
let bTask: BaseClass = BaseClass.task()
let cTask: ChildClass = ChildClass.task()
案例#2
如果这样的事情对你来说看起来更合理,你也可以做这样的事情:
class BaseClass {
class var task: AnyObject {
get {
return self.init()
}
}
required init() {
}
// ...
}
class ChildClass : BaseClass {
// ...
}
然后您可以实例化您的类,例如:
let bTask: BaseClass = BaseClass.task as! BaseClass
let cTask: ChildClass = ChildClass.task as! ChildClass
案例#3
如果您对上述任何想法不满意,这也是您的另一个选择:
class BaseClass {
class func task() -> Self {
return self.init()
}
required init() {
}
// ...
}
class ChildClass : BaseClass {
// ...
}
实例化类似于第一种情况:
let bTask: BaseClass = BaseClass.task()
let cTask: ChildClass = ChildClass.task()
注意:如果你想处理真正的单例,你可能需要为你的最终代码改进选择的概念,这些例子并不像我在开头提到的那样完美,但它们向你展示了一些你可以拥有的选项,你可以使用作为模板。