は、ドキュメントに従って@State
設定する必要がprivate
あり、 でのみアクセスする必要がありますView
body
。
https://developer.apple.com/documentation/swiftui/state
YourObservableObject@EnvironmentObject
を使用して設定する必要がありますContentView().environmentObject(
)
https://developer.apple.com/documentation/combine/observableobject
https://developer.apple.com/documentation/swiftui/stateobject
以下はサンプルコードです
import SwiftUI
class SampleOO: ObservableObject {
@Published var name: String = "init name"
}
//ParentView
struct OOSample: View {
//The first version of an @EnvironmentObject is an @ObservedObject or @StateObject
//https://developer.apple.com/tutorials/swiftui/handling-user-input
@ObservedObject var sampleOO: SampleOO = SampleOO()
var body: some View {
VStack{
Button("change-name", action: {
self.sampleOO.name = "OOSample"
})
Text("OOSample = " + sampleOO.name)
//Doing this should fix your error code with no other workarounds
ChildEO().environmentObject(sampleOO)
SimpleChild(name: sampleOO.name)
}
}
}
//Can Display and Change name
struct ChildEO: View {
@EnvironmentObject var sampleOO: SampleOO
var body: some View {
VStack{
//Can change name
Button("ChildEO change-name", action: {
self.sampleOO.name = "ChildEO"
})
Text("ChildEO = " + sampleOO.name)
}
}
}
//Can only display name
struct SimpleChild: View {
var name: String
var body: some View {
VStack{
//Cannot change name
Button("SimpleChild - change-name", action: {
print("Can't change name")
//self.name = "SimpleChild"
})
Text("SimpleChild = " + name)
}
}
}
struct OOSample_Previews: PreviewProvider {
static var previews: some View {
OOSample()
}
}