gpt4 book ai didi

ios - 台风+swift自动注入(inject)

转载 作者:搜寻专家 更新时间:2023-10-31 23:03:51 25 4
gpt4 key购买 nike

我在一个 swift 项目中使用台风,据我所知,我必须像这样在 TyphoonAssembly 中显式映射所有注入(inject):

 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())
}
}

这似乎很难管理,而且非常脆弱(重构时)。

我看到这里支持自动注入(inject)(按类型匹配): https://github.com/appsquickly/Typhoon/wiki/Auto-injection-(Objective-C)但这是为了 objective-c 。

有谁知道我可以在不显式注册名称为字符串的 Prop 的情况下连接注入(inject)的方法吗?

谢谢!

最佳答案

(这里是台风创作者)。

Typhoon 是一个动态的、内省(introspection)的依赖注入(inject)容器,并使用 Objective-C 运行时。对于 Swift,存在以下限制:

  • 对于 Objective-C,它避免了魔法字符串,允许使用普通的 IDE 重构工具,但是在 Swift 中选择器魔法字符串。
  • Objective-C 运行时只提供属性的类型信息,不提供方法或初始化程序参数。所以只有属性可以支持任何类型的 Autowiring (宏、隐式等)。
  • Swift 没有注释或宏系统,(但它确实有 1st class 函数)。

您可以使用以下命令指示 Typhoon 在 Swift 中自动连接属性:

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

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

. .这将按类型匹配,就像 Autowiring Objective-C 宏一样。但是,这并不能避免指定要注入(inject)的属性的名称。 在 Swift 中没有其他方法可以做到这一点。 :(

值得一提的是,将 Typhoon 与 Swift 一起使用时还有其他限制:

  • “纯”Swift 类——不扩展 Cocoa 基类或声明 @objc 指令——不支持内省(introspection)、动态调度或动态方法调用。 Typhoon 仅适用于 Cocoa 类。
  • Swift 协议(protocol)需要@objc 指令。

关于ios - 台风+swift自动注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29467353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com