我发现了这个问题SwiftUI: Putting multiple BindableObjects into Envionment
答案说 environmentObject(ObservableObject) 返回修改后的视图,因此我可以为多个 environmentObject 创建调用链。
像
let rootView = ContentView()
.environmentObject(firstBindable)
.environmentObject(secondBindable)
我想知道如果 firstBindable 和 secondBindable 是同一类型会产生什么结果。如何.environmentObject()
知道程序员打算在firstBindable
和之间设置的确切值是什么secondBindable
。
所以我测试了这个
- 我做了一个 ObservableObject 类
final class TempStr: ObservableObject {
@Published var tmpStr = "temp"
init(initStr: String) {
tmpStr = initStr
}
}
- 从 sceneDelegate 调用 environmentObject 链
window.rootViewController
= UIHostingController(rootView:
TestView()
.environmentObject(TempStr(initStr: "1st"))
.environmentObject(TempStr(initStr: "2nd"))
- 并使用 View 中的值
struct TestView: View {
@EnvironmentObject var tmp1: TempStr
@EnvironmentObject var tmp2: TempStr
var body: some View {
Text(tmp1.tmpStr + " " + tmp2.tmpStr)
}
}
- 结果是'1st 1st'
如果我的代码调用一个 .environmentObject() 之类的
TestView().environmentObject(TempStr(initStr: "1st"))
TestView 中的 tmp1 和 tmp2 具有相同的值TempStr(initStr: "1st")
。看起来.environmentObject()
call 设置了相同类型的所有值。
实际上,我知道它不起作用,但我只是尝试使用这个问题。
我想知道实现目标的正确方法是什么。
谢谢