Инъекция тайфуна и установка делегата

Я кодирую в iOS с помощью Swift. Я использую интеграцию plist и раскадровки.

У меня есть объект, у которого есть делегат. Я хочу внедрить этот объект в несколько контроллеров представления (не во все сразу) и установить делегат этого объекта в качестве контроллера представления, в который был введен объект. Это должно быть сделано в сборке или я должен установить делегата вручную в ViewDidLoad? Как это можно сделать в сборке? Какова наилучшая практика для этого?

Спасибо.


person Jerome Chan Yeow Heong    schedule 06.05.2015    source источник


Ответы (1)


Я рекомендую использовать метод обратного вызова typhoonDidInject

typhoonDidInject() -> Void {
    myObject.delegate = self;
}

или, если вы не хотите связываться напрямую с Typhoon, укажите в сборке пользовательскую:

definition.performAfterInjections("someMethod")

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

Изменить:

Если вы хотите подключить все это к Typhoon, вы можете предоставить что-то вроде:

- (UIViewController *)someViewController
{
   return [TyphoonDefinition withClass:[FoobarViewController class]    
       configuration:^(TyphoonDefinition *definition) {

        [definition injectProperty:@selector(machine) 
            with:[self spaghettiMachine]];
        [definition performAfterInjections:@selector(injectSpaghettiMachine:with:) 
            parameters:^(TyphoonMethod *method) {

            [method injectParameterWith:[self spaghettiMachine]];

            //This will be the same object for any scope except 'Prototype'
            [method injectParameterWith:[self someViewController]];
        }];
    }];
}


- (SpaghettiMachine *)spaghettiMachine
{
    return [TyphoonDefinition withClass:[SpaghettiMachine class]     
        configuration:^(TyphoonDefinition *definition) {

        definition.scope = TyphoonScopeWeakSingleton;
    }];
}

Но для этого все равно потребуется, чтобы каждый из ваших контроллеров представления реализовал метод, например:

- (void)injectSpaghettiMachine:(SpaghettiMachine *)machine    
    with:(id)delegate
{
    machine.delegate = self;
}

. . вышеизложенное может быть полезно, если контроллеры имеют общий базовый класс.

person Jasper Blues    schedule 08.05.2015