Я реализую класс 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 на имени константы.
Любые идеи?:)