1

Typhoon フレームワークをテストするプロジェクトを作成しました。2 つのクラスを作成し、いくつかのプロパティとコンストラクター、およびそこApplicationAssemblyからデータをロードするためのデフォルトを挿入します。CoreAssemblyConfiguration.plist

アプリケーションアセンブリ

public class ApplicationAssembly: TyphoonAssembly { 

    public dynamic func config() -> AnyObject {
       return TyphoonDefinition.configDefinitionWithName("Config.plist")
    } 
}

CoreAssembly

public class CoreAssembly: TyphoonAssembly {

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

           definition.useInitializer("initWithDebugging:debugProcess:mainURL:") {
              (initializer) in

               initializer.injectParameterWith(TyphoonConfig("debug_mode"))
               initializer.injectParameterWith(TyphoonConfig("debug_path"))
               initializer.injectParameterWith(TyphoonConfig("api_url"))                
           }
           definition.scope = TyphoonScope.Singleton
       }
    }    

    public dynamic func viewController() -> AnyObject {

       return TyphoonDefinition.withClass(ViewController.self) {
           (definition) in

           definition.injectProperty("apiHandler", with:self.apiHandler())
       }
    }   
}

最初に を設定し、Info.plist次にを設定しました。TyphoonInitialAssembliesApplicationAssemblyCoreAssembly

アプリがクラスAppDelegateのどちらにも入らないことを除いて、すべてが例外なく正常に動作します。ViewControllerドキュメントなどで何かを見逃したのかもしれません。

ここで何が欠けていますか?

ViewControllerStoryboard の初期ビュー コントローラーであるクラスにデバッグで入らないのはなぜですか?

4

1 に答える 1

1

問題は、ApiHandler クラスが要件である NSObject を拡張しないことでした。これは、Typhoon が内省的な Dependency Injection コンテナーであるためです。Swift にはネイティブのイントロスペクションがないため、Objective-C ランタイムを使用します。

ただし、このような難読化された方法でアプリがクラッシュすることはありません。無限に再帰するのではなく、意味のあるエラーで失敗する方法を確認するために問題を開きました。

最初の問題を解決した後、ApiHandler の init メソッドが Swift Bool オブジェクトを渡していることにも気付きました。これは NSNumber である必要があります。

init(debugging : NSNumber, debugProcess : String, mainURL : String) {
    self.debugging = debugging.boolValue
    self.debugProcess = debugProcess
    self.mainURL = mainURL                
}

Typhoon が Objective-C ランタイムを使用することを考えると、Swift でそれを使用するにはいくつかの癖があります。KVO で Swift を使用するために概説されているのと同じ種類のルールが適用されます。

于 2015-04-22T10:18:46.733 に答える