Я чувствую себя немного небезопасной о вас помечено ваш вопрос как одноточечного, но в основном код, который вы представили, не имеет ничего общего с синглтонов, поэтому я попытался подражать вашим оригинальным классам и показать здесь несколько вариантов.
они написаны на 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()
ПРИМЕЧАНИЕ: Вам может понадобиться для уточнения выбранной концепции для окончательного кода, если вы хотите иметь дело с реальными одиночками, эти примерами не были полностью разработаны, как я упоминал в начале, но они показывают вам несколько вариантов, которые вы можете использовать, и можете использовать их в качестве шаблона.
Спасибо большое! ** Случай №3 ** работает для меня. Еще раз спасибо! Я думаю о том, что у Swift много непонятного синтаксиса. Поэтому я много раз вводил в заблуждение. – imeteora
@imeteora, не проблема, я оставлю здесь и другие два варианта; кто знает, может быть, кто-то сможет их использовать в будущем. – holex