🔭
@StateObjectと@ObservedObjectのView間受け渡し観測隊
結論
受け渡し先で宣言だけのものは渡さないといけない。
受け渡し先でinitしているものでも渡してOK。
@StateObject
と @ObservedObject
間の受け渡しもOK。
はじめに
この観測は @StateObject
と @ObservedObject
のView間受け渡しを、(私が思う)全パターンを機械的に観測するものである。各パターンに意味があるかどうかは考慮していない。
ソースコード
class TestClass: ObservableObject {
@Published var value = 0
}
struct ObjectTest1: View {
@StateObject var pSO = TestClass()
@ObservedObject var pOO = TestClass()
var body: some View {
VStack {
//ObjectTest2()
ObjectTest2(cSO_Dec: pSO, cOO_Dec: pOO)
ObjectTest2(cSO_Dec: pOO, cOO_Dec: pSO)
ObjectTest2(cSO_Dec: pSO, cSO_Init: pSO, cOO_Dec: pOO, cOO_Init: pOO)
ObjectTest2(cSO_Dec: pOO, cSO_Init: pOO, cOO_Dec: pOO, cOO_Init: pOO)
}
}
}
struct ObjectTest2: View {
@StateObject var cSO_Dec: TestClass
@StateObject var cSO_Init = TestClass()
@ObservedObject var cOO_Dec: TestClass
@ObservedObject var cOO_Init = TestClass()
var body: some View {
Text("Hello, World!")
}
}
表
〜から | 〜へ | 結果 |
---|---|---|
なし | @StateObject 宣言のみ | NG |
なし | @StateObject initあり | OK |
なし | @ObservedObject 宣言のみ | NG |
なし | @ObservedObject initあり | OK |
@StateObject | @StateObject 宣言のみ | OK |
@StateObject | @StateObject initあり | OK |
@ObservedObject | @ObservedObject 宣言のみ | OK |
@ObservedObject | @ObservedObject initあり | OK |
@StateObject | @ObservedObject 宣言のみ | OK |
@StateObject | @ObservedObject initあり | OK |
@ObservedObject | @StateObject 宣言のみ | OK |
@ObservedObject | @StateObject initあり | OK |
続編
Discussion