SwiftUI 如何知道将哪个 environmentObject 分配给哪个变量
Posted
技术标签:
【中文标题】SwiftUI 如何知道将哪个 environmentObject 分配给哪个变量【英文标题】:How does SwiftUI know what environmentObject to assign to which variable 【发布时间】:2020-06-29 18:49:05 【问题描述】:假设我有一个View
和Environment Object
,如下所示:
struct MyView: View
@EnvironmentObject
var viewModel: RegisterViewModel
在祖先的某个地方,我会像这样提供这个对象:
NavigationView
LoginView()
.environmentObject(RegisterViewModel())
将此值实际分配给var viewModel
的机制是什么。我的代码中没有任何地方需要指定变量的名称,但它已正确分配。如果我的同类型环境对象很少,会发生什么?
【问题讨论】:
【参考方案1】:EnvironmentObjects 由 type 标识。
SwiftUI 只是查找特定类型的环境变量(这里是 RegisterViewModel
)并使用它找到的第一个。
这段代码把RegisterViewModel
放到环境中:
.environmentObject(RegisterViewModel())
然后,在构建视图时,SwiftUI 会在环境中查找 RegisterViewModel
类型:
@EnvironmentObject var viewModel: RegisterViewModel
更多细节:
How to set multiple EnvironmentObjects which are same type Why can't swiftui distinguish 2 different environment objects?【讨论】:
如果我定义两个相同类型的变量会发生什么?他们会都被分配到最后一个提供的吗? @DamianDudycz 请参阅Why can't swiftui distinguish 2 different environment objects? 和How to set multiple EnvironmentObjects which are same type以上是关于SwiftUI 如何知道将哪个 environmentObject 分配给哪个变量的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI 如何快速识别视图(View)界面的刷新是由哪个状态的改变导致的?
SwiftUI 如何快速识别视图(View)界面的刷新是由哪个状态的改变导致的?