Вызов через existential/any P использует witness table; override у классов — виртуальная таблица; default в extension, не объявленный в протоколе как requirement, может диспетчеризоваться статически.
Разбор
- Customization point должен быть requirement в протоколе.
- Иначе вызов через протокол может взять default, а не реализацию типа.
- Важный senior-вопрос на собеседованиях.
- Тестируйте поведение при вызове через протокол.
Итог
Для переопределяемого поведения объявляйте requirement явно в протоколе.