Я не уверен, как решить эту проблему, но корень проблемы в том, что newBuilder(someDependancy:)
имеет сигнатуру общего типа, но на самом деле это не универсальная.
Возвращаемый тип утверждает, что функция может возвращать объект любого типа T: BuilderType where Builder.ObjectType == O
, но это явно не так. Запрос этой функции на возврат любого типа, кроме ConcreteBuilder
, не поддерживается. В лучшем случае вы можете использовать принудительное приведение, но если кто-то напишет let myBuilder: MyBuilder = ComplexObject.newBuilder(someDependancy: dec)
, код будет аварийно завершен (даже если MyBuilder
удовлетворяет вашим общим ограничениям), потому что вы пытаетесь принудительно привести приведение ConcreteBuilder
к MyBuilder
.
Что касается решения ... У меня его нет. По сути, вы просто хотите вернуть BuilderType
, но я не думаю, что это возможно, потому что у него есть связанный тип.