Avatar
@swift-5.2.5 protocol P1 {} protocol P2: P1 {} struct S1: P1 {} struct S2: P2 {} class Animal { init<X: P2>(_ x: X) { } required convenience init() { self.init(S2()) } } class Cat: Animal { let foo: Int init(foo: Int) { self.foo = foo super.init(S2()) } } func main<A: Animal>(_ animalType: A.Type) -> A { animalType.init() } let cat = main(Cat.self) print(cat.foo)