首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Swift在台风中通过协议注入依赖?

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

Stack Overflow用户
提问于 2015-11-04 22:46:27
回答 1查看 718关注 0票数 1

我对台风依赖注入框架有问题。我的视图控制器MainViewController依赖于我要声明为对应于协议DataProviderProtocolAnyObjectdataProvider属性。

代码语言:javascript
运行
复制
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属性由Typhoon注入并初始化到实现该协议的类TestDataProvider的相应实例。但是我也有RealDataProvider,它也对应于DataProviderProtocol,有时可能会被使用

但是这段代码与消息一起崩溃

无法为对象注入属性“dataProvider”。找不到塞特选择器。确保属性的存在和可写“

如果我使用TestDataProvider的属性类,我可以在没有崩溃的情况下注入该属性,但这将禁用注入不同DataProviderProtocol实现的能力。

我理解这种情况的发生是因为DataProviderProtocol属性类型不是NSObject后续程序。但我无法在Swift中将属性声明为NSObject<DataProviderProtocol>

我很感谢你的帮助

P.S.我的装配课

代码语言:javascript
运行
复制
public class CEAppAssembly:TyphoonAssembly {

   //uiviewcontrollers' components assembly
   var mainComponentsAssembly : CEMainComponentsAssembly!


   /**
    UI Dependencies
   **/

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

         definition.injectProperty("dataProvider", with: self.mainComponentsAssembly.dataProvider())
      }
   }
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33533534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档