私は台風を使用してサブタイプUIViewController
に依存関係を注入しています。 、Typhoon:withFactory:selector:inject styleからの定義にサブクラスプロパティを挿入します。
return TyphoonDefinition.withFactory(self.storyboard(), selector:"instantiateViewControllerWithIdentifier:", parameters: { (method) in
method.injectParameterWith("camera-mode-controller")
}, configuration: { (definition) in
definition.injectProperty("cameraProvider", with: self.systemComponents.systemCameraProvider())
})
しかし、UIStoryboard署名func instantiateViewControllerWithIdentifier(identifier: String) -> UIViewController
は、このファクトリメソッド初期化子がUIViewController
を作成することを示している:私を「工場」注入法を使用してビューコントローラのインスタンス化を行う必要a different question i hadへの潜在的な解決策が見つけました私のサブクラス(dynamic var cameraProvider
)のプロパティを持っていません。したがって、実行時にプロパティの挿入は、setter not found
で失敗します。
"クラスを使って定義を作成:factory:with method:and properties"という方法があるので、定義しているクラスが実際にはUIViewController
ではないことがわかりますが、実際は私の場合、CameraModeViewController: UIViewController
?私は、TyphoonDefinition.withParent:class:configuration:
TyphoonDefinition.withParent:class:configuration:
この効果を生成するwithFactory:selector:parameters:
メソッドと連鎖可能性があります参照してくださいAPIドキュメントを掘る?しかし、私の試み:
public dynamic func viewControllerFromID(id: String) -> AnyObject {
return TyphoonDefinition.withFactory(self.storyboard(), selector: "instantiateViewControllerWithIdentifier:") {
(method) in
method.injectParameterWith(id)
}
}
public dynamic func cameraModeViewController() -> AnyObject {
return TyphoonDefinition.withParent(self.viewControllerFromID("camera-mode-controller"), `class`: CameraModeViewController.self) {
(definition) in
definition.injectProperty("cameraProvider", with: self.systemComponents.systemCameraProvider())
}
}
はエラーを生成します:-[TyphoonInjectionByRuntimeArgument forwardingTargetForSelector:]
で'You can't call a method on the runtime argument being passed in. It has to be passed in as-is'
セレクタ引数"length"
と。何かご意見は?