1

我正在使用 Swift 在 iOS 中进行编码。我正在使用 plist 和故事板集成。

我有一个有委托的对象。我希望将此对象注入多个视图控制器(不是一次全部)并将该对象的委托设置为该对象被注入的视图控制器。这应该在程序集中完成还是应该在 ViewDidLoad 中手动设置委托?如何在大会中做到这一点?对此的最佳做法是什么?

谢谢你。

4

1 回答 1

2

我推荐使用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;
}

. . 如果控制器具有公共基类,则上述内容可能很有用。

于 2015-05-08T01:17:40.103 回答