可以说我有一个ViewEnvironment Object像这样:

struct MyView: View {
    @EnvironmentObject
    var viewModel: RegisterViewModel
}
在祖先的某个地方,我会提供这样的对象:
NavigationView {
    LoginView()
}
.environmentObject(RegisterViewModel())
将此值实际分配给var viewModel的机制是什么?在我的代码中无处需要指定变量的名称,但它已正确分配。如果我没有几个相同类型的环境对象,将会怎样?

最佳答案

EnvironmentObject由类型标识。
SwiftUI只是查找特定类型的环境变量(此处为RegisterViewModel),并使用找到的第一个变量。
此代码将RegisterViewModel放入环境:

.environmentObject(RegisterViewModel())
然后,在构建 View 时,SwiftUI在环境中查找RegisterViewModel类型:
@EnvironmentObject var viewModel: RegisterViewModel
更多细节:
  • How to set multiple EnvironmentObjects which are same type
  • Why can't swiftui distinguish 2 different environment objects?
  • 关于ios - SwiftUI如何知道将哪个environmentObject分配给哪个变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62644817/

    10-10 04:03