Avatar
@State@ObservedObject のライフサイクルって違うんですね。 @Stateinit が呼ばれても初期化されないけど、 @ObservedObject はされるみたい。
👀 1
5:13 AM
struct ContentView: View { @State var count: Int = 0 var body: some View { VStack { Stepper("\(count)", value: $count) SView() CView() } .padding(30) } } struct S { var value: Int init(value: Int) { self.value = value } } struct SView: View { @State var s: S = .init(value: 42) var body: some View { Stepper("S: \(s.value)", value: $s.value) } } class C: ObservableObject { @Published var value: Int init(value: Int) { self.value = value } } struct CView: View { @ObservedObject var c: C = .init(value: 42) var body: some View { Stepper("C: \(c.value)", value: $c.value) } } 1つ目の Stepper を増減したときに SView はリセットされないけど CView はリセットされる。
5:14 AM
SView では S のイニシャライザは呼ばれてるけど、 @State への書き込みが行われない模様。