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;
    }];
}

ただし、これには、各View Controllerが次のようなメソッドを実装する必要があります。

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

. . 上記は、コントローラーに共通の基本クラスがある場合に役立つ場合があります。

于 2015-05-08T01:17:40.103 に答える