Wof*_*kee 9 publish observable swiftui combine
我发现了这个问题SwiftUI: Putting multiple BindableObjects into Envionment
答案说 environmentObject(ObservableObject) 返回修改后的视图,因此我可以为多个 environmentObject 创建调用链。
喜欢
let rootView = ContentView()
.environmentObject(firstBindable)
.environmentObject(secondBindable)
Run Code Online (Sandbox Code Playgroud)
我想知道如果 firstBindable 和 secondBindable 是相同类型的结果是什么。如何.environmentObject()知道什么是程序员打算在firstBindable和之间设置的 exec 值secondBindable。
所以我测试了这个
final class TempStr: ObservableObject {
@Published var tmpStr = "temp"
init(initStr: String) {
tmpStr = initStr
}
}
Run Code Online (Sandbox Code Playgroud)
window.rootViewController
= UIHostingController(rootView:
TestView()
.environmentObject(TempStr(initStr: "1st"))
.environmentObject(TempStr(initStr: "2nd"))
Run Code Online (Sandbox Code Playgroud)
struct TestView: View {
@EnvironmentObject var tmp1: TempStr
@EnvironmentObject var tmp2: TempStr
var body: some View {
Text(tmp1.tmpStr + " " + tmp2.tmpStr)
}
}
Run Code Online (Sandbox Code Playgroud)
如果我的代码调用一个 .environmentObject() 就像
TestView().environmentObject(TempStr(initStr: "1st"))
Run Code Online (Sandbox Code Playgroud)
TestView 中的 tmp1 和 tmp2 具有相同的值TempStr(initStr: "1st")。看起来.environmentObject()call 设置了相同类型的所有值。
实际上,我知道它行不通,但我只是尝试使用此问题。
我想知道实现我的目标的正确方法是什么。
谢谢
小智 5
这有效:
场景委托:
class MyModel: ObservableObject {
@Published var tmpStr1:TempStr!
@Published var tmpStr2:TempStr!
init(initStr1: String, initStr2:String) {
tmpStr1 = TempStr(initStr: initStr1)
tmpStr2 = TempStr(initStr: initStr2)
}
}
class TempStr: ObservableObject {
@Published var tmpStr:String!
init(initStr: String) {
tmpStr = initStr
}
}
Run Code Online (Sandbox Code Playgroud)
内容查看:
struct ContentView: View {
@EnvironmentObject var myModel: MyModel
var body: some View {
Text(myModel.tmpStr1.tmpStr + " " + myModel.tmpStr2.tmpStr)
}
}
Run Code Online (Sandbox Code Playgroud)
诚然,这可能不是您正在寻找的,但这引出了一个问题 - 为什么想要 a 的两个实例class而不希望每个实例都出现在您的模型中?您可以轻松地将两个单独的类作为模型的 pat (以及 as ObservableObjects),并且如果您想要每个模型的两个单独的实例SceneDelegate?就在那里。
但是,如果您想要模型/类/其他内容的两个实例,那么感觉就像是重构的候选者。
| 归档时间: |
|
| 查看次数: |
2006 次 |
| 最近记录: |