Я пытаюсь вызвать инициализатор, требуемый протоколом A
, для типа, который соответствует A
и является подклассом C
.Общие ограничения и наследование инициализатора в Swift
Все хорошо и хорошо, если C
- базовый класс. Но как только C
подклассы другого класса, скажем B
, он ломается.
Вот что я имею в виду:
protocol A {
init(foo: String)
}
class B {
init() {}
}
class C: B {}
func makeSomething<T: A>() -> T where T: B {
return T(foo: "Hi")
}
Это работает. Но если я изменю where T: B
до where T: C
, я получаю следующую ошибку: argument passed to call that takes no arguments
. Позвольте мне позвонить только B
с init
.
Почему я не могу назвать этот инициализатор? Я понимаю, что у суперкласса есть свои назначенные инициализаторы, которые нужно вызвать. Но это будет соблюдаться, когда кто-то действительно пишет класс, который подклассы B
и соответствует A
. (Например, с использованием init(Foo: String)
и вызова super.init(bar: Int)
внутри).
Любая помощь здесь будет принята с благодарностью. Благодаря!