4

私は、次のように TyphoonAssembly ですべてのインジェクションを明示的にマップする必要があることを理解している限り、迅速なプロジェクトで台風を使用しています。

 public dynamic func appDelegate() -> AnyObject {
    return TyphoonDefinition.withClass(AppDelegate.self) {
        (definition) in

        definition.injectProperty("cityDao", with:self.coreComponents.cityDao())
        definition.injectProperty("rootViewController", with:self.rootViewController())
    }
}

これは管理が難しく、非常に壊れやすいようです (リファクタリング時)。

ここで自動注入 (タイプによるマッチング) がサポートされていることがわかります: https://github.com/appsquickly/Typhoon/wiki/Auto-injection-(Objective-C) しかし、これは目的 c 用です。

名前を文字列として明示的に小道具を登録せずにインジェクションを接続する方法を知っている人はいますか?

ありがとう!

4

2 に答える 2

1

(台風作成者はこちら)。

Typhoon は、動的で内省的な依存性注入コンテナーであり、Objective-C ランタイムを使用します。Swiftに関しては、次の制限があります。

  • Objective-C ではマジック ストリングを回避し、通常の IDE リファクタリング ツールを使用できますが、Swift セレクターではマジック ストリングです。
  • Objective-C ランタイムは、メソッドまたは初期化子パラメーターではなく、プロパティの型情報のみを提供します。そのため、あらゆる種類の自動配線 (マクロ、暗黙的など) をサポートできるのはプロパティのみです。
  • Swift には注釈やマクロ システムはありません (ただし、1 級関数はあります)。

以下を使用して、Swift でプロパティを自動配線するように Typhoon に指示できます。

 public dynamic func appDelegate() -> AnyObject {
    return TyphoonDefinition.withClass(AppDelegate.self) {
        (definition) in

        definition.injectProperty("cityDao")
        definition.injectProperty("rootViewController")
    }
}

. . これは、自動配線の Objective-C マクロが行うように、タイプによって一致します。ただし、これは注入されるプロパティの名前を指定することを避けません。Swift でこれを行う方法は他にありません。:(

Swift で Typhoon を使用する場合、追加の制限があることに注意してください。

  • 「純粋な」Swift クラス (Cocoa 基本クラスを拡張せず、@objcディレクティブを宣言しない) は、イントロスペクション、動的ディスパッチ、または動的メソッド呼び出しをサポートしません。Typhoon は Cocoa クラスでのみ機能します。
  • Swift プロトコルには@objcディレクティブが必要です。
于 2015-04-06T08:15:06.050 に答える