gpt4 book ai didi

ios - 台风 Storyboard : Inject an IBOutlet View to a Controller dependency

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:16:23 27 4
gpt4 key购买 nike

我有一个 Storyboard,其中有一个 View 使用 socket 连接到他的 Controller 。在同一个 Controller 中,我想注入(inject)一个需要访问该 View 的对象。我不想将该 View 手动传递给对象,而是希望自动注入(inject)它,但我不知道如何以及是否可以使用当前代码结构实现它。

class LoadingViewController: UIViewController {
@IBOutlet weak var loadingView: UIActivityIndicatorView!
private(set) var loadingViewModel: LoadingViewModel! // Dependency Injection
}

// Assembly

dynamic func loadingViewController() -> AnyObject {
return TyphoonDefinition.withClass(LoadingViewController.self) {
(definition) in
definition.injectProperty("loadingViewModel", with:self.loadingViewModel())
}
}

dynamic func loadingViewModel() -> AnyObject {
return TyphoonDefinition.withClass(LoadingViewModel.self) {
(definition) in
definition.injectProperty("loadingView", with:???) // I want loadingViewController.loadingView
}
}

我认为这与运行时参数和循环依赖有关

最佳答案

这是一个很好的。我们必须考虑 Storyboard 创建的对象和 Typhoon 之间的生命周期。

你有没有试过这样的事情:

//The view controller 
dynamic func loadingViewController() -> AnyObject {
return TyphoonDefinition.withClass(LoadingViewController.self) {
(definition) in
definition.injectProperty("loadingViewModel",
with:self.loadingViewModel())
definition.performAfterInjections("setLoadingViewModel", arguments: ) {
(TyphoonMethod) in
method.injectParameterWith(self.loadingViewModel())
}
}
}

dynamic func view() -> AnyObject {
return TyphoonDefinition.withFactory(self.loadingViewController(),
selector:"view")
}

dynamic func loadingViewModel() -> {
return TyphoonDefinition.withClass(SomeClass.class) {
(definition) in
definition.injectProperty("view", with:self.view())
}
}
  • 为 View 创建一个定义,指示 Typhoon 它将从 loadingViewController
  • 发出
  • 为注入(inject)了 viewloadingViewModel 创建定义。
  • loadingViewControllerview 创建之后,最后一步注入(inject) loadingViewModel

我不记得在调用 performAfterInjections 之前是否清除了作用域池。如果是,您可能需要将 loadingViewController 的范围设置为 TyphoonScopeWeakSingleton 而不是默认的 TyphoonScopeObjectGraph

由于 Typhoon 和 Storyboards 之间的相互作用,手动提供实例可能更简单,例如 viewDidLoad。但是你能试试上面的方法然后回复我吗?

关于ios - 台风 Storyboard : Inject an IBOutlet View to a Controller dependency,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28108433/

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