Такого рода двунаправленной зависимости следует избегать, так как на уровне компиляции это означает, что у каждого из них есть в том числе и у другого.
Вы слишком сильно привязываете свои классы, когда одной из целей ОО-программирования является уменьшение связи между компонентами.
Даже если вы можете это сделать, это не значит, что это хорошая практика.
Хорошей практикой было бы указать 2 протокола: один для сервера / объекта / производителя / ... и один для клиента / делегата / потребителя /...
Тогда А реализовал бы один протокол, поговорил бы с объектом, реализующим второй.
В реализовал бы второй протокол.
В конце концов, это означает, что в будущем вы сможете заменить реализацию B на новую API / модель программирования / тестовую заглушку и т. Д.
Уменьшение связи - это средство, помогающее модульности и тестируемости вашего кода.
Вам не нужно, но вы будете рады вернуться к своему коду через 6 месяцев:)