protocol Builder {
associatedtype Output where Output: MyProtocol
func build() -> Output?
}
// concrete type
struct ABuilder: Builder {
func builder() -> MyProtocol {
if someCondition {
return aSubClassOfMyProtocol
} else {
return anotherSubClassOfMyProtocol
}
}
}
MyProtocol
is a protocol type. It is also the Output
constraint. Because the concrete Builder ABuilder
is going to return two different sub class types that conform MyProtocol
. How can I make the generic constraint work?
I am trying to make the generic constraint be the same.
I think you are correct that having the typecasting outside the
Builder
is a better way. I also found another possibility. The difference is that we have the concrete class types from thebuild
function.