如何使用Swift在Typhoon中通过协议注入依赖?

时间:2015-11-04 22:46:27

标签: ios swift dependency-injection swift2 typhoon

我遇到Typhoon依赖注入框架的问题。 我的viewcontroller MainViewController取决于我要声明为dataProvider的{​​{1}}属性,对应于协议AnyObject

DataProviderProtocol

我希望Typhoon注入此class MainViewController: UIViewController { // Compiler error here var dataProvider : DataProviderProtocol! // something more } protocol DataProviderProtocol { func fetchAllBanks(closure : ([BankObject]) -> Void) } class TestDataProvider: NSObject, CEDataProviderProtocol { func fetchAllBanks(closure : ([CEBankObject]) -> Void) { var resultBanks = ///////code that creates test data closure(resultBanks); } 属性并初始化为实现此协议的类dataProvider的相应实例。但我也TestDataProvider也对应RealDataProvider,有时可能会使用

但是这段代码与消息

崩溃了
  

无法为对象注入属性'dataProvider'   ''。塞特选择器没有   找到。确保该属性存在且可写'

如果我使用DataProviderProtocol的属性类,我可以在不崩溃的情况下注入此属性,但这会禁用注入不同TestDataProvider实现的功能。

我理解这次崩溃是因为DataProviderProtocol属性类型不是DataProviderProtocol后继者。但我找不到在Swift

中将属性声明为NSObject的方法

我将不胜感激任何帮助

P.S。我的装配课

NSObject<DataProviderProtocol>

1 个答案:

答案 0 :(得分:3)

Typhoon使用Objective-C运行时内省和动态功能。因此:

  • 协议必须用'@objc'指令标记。
  • 不能注射与Objective-C不相容的类型(即'纯swift')。

Quick Start指南中有关于此的更多信息。如果您在审核并进行这些更改后仍然遇到问题,请告诉我们。

我们计划在不久的将来发布Pure Swift版本的Typhoon。