Не могу прокинуть делегат из контейнера, как сделать правильно?

Когда вы говорите о "прокидывании делегата из контейнера" в контексте Swift, предполагается, что у вас есть один объект (назовем его "Контейнер"), который содержит другой объект (назовем его "Вложенный объект"), и вы хотите, чтобы делегат для Вложенного объекта был установлен в делегат для Контейнера.

Один из способов сделать это - использовать паттерн проектирования "Наблюдатель" или "Реактор". В этом случае, ваш Контейнер должен реализовать протокол делегата, а Вложенный объект должен иметь свойство, которое будет устанавливать делегатом ссылку на Контейнер. Когда Вложенный объект нуждается в делегировании какого-либо события Контейнеру, он вызывает соответствующий метод делегата, передавая необходимые данные.

Вот пример кода, который показывает, как это можно сделать:

protocol ContainerDelegate: class {
    func didTriggerEvent(data: Any)
}

class Container: ContainerDelegate {
    let nestedObject: NestedObject
    
    init() {
        nestedObject = NestedObject()
        nestedObject.delegate = self
    }
    
    func didTriggerEvent(data: Any) {
        // Обработка события делегата
    }
}

class NestedObject {
    weak var delegate: ContainerDelegate?
    
    func triggerEvent(data: Any) {
        delegate?.didTriggerEvent(data: data)
    }
}

В этом примере есть два класса - Container и NestedObject. Container реализует протокол делегата, и в своем методе инициализации создает экземпляр NestedObject и устанавливает себя в качестве его делегата. Когда NestedObject нуждается в делегировании события, он вызывает метод делегата didTriggerEvent(data:), передавая ему необходимые данные.

Если вы хотите передать уже существующий делегат из одного объекта в другой, просто установите свойство делегата Вложенного объекта ссылкой на делегата Контейнера:

container.nestedObject.delegate = existingDelegate

В этом случае, вы передаете ссылку на существующий объект делегата Вложенному объекту.

Однако, будьте осторожны при передаче ссылок на делегаты. Убедитесь, что вы используете утечку памяти или другие подходы для предотвращения утечек памяти, если необходимо.

В общем, прокидывание делегата из контейнера в Swift может быть реализовано с использованием паттерна "Наблюдатель" или "Реактор". Примеры кода выше показывают примеры реализации такого прокидывания.