Я реализую класс Foo
в Swift, который должен создавать объекты данного подкласса SuperBar
, например. Bar: SuperBar
. Мне очень нравятся generics в Swift, поэтому я попытался реализовать его так:
class Foo<T: SuperBar> {
func instantiateObject() -> T {
return T()
}
}
class SuperBar {
}
class Bar: SuperBar {
}
let foo = Foo<Bar>()
let obj = foo.instantiateObject()
Вы можете запустить фрагмент кода на игровой площадке Xcode и заметить, что obj
имеет тип SuperBar
вместо Bar
, хотя он говорит Bar
, когда я Alt -click на имени константы.
Любые идеи?:)