SwiftUI의 라이프 사이클

작성일

SwiftUI는 기존 UIKit보다 더욱 더 라이프 사이클이 간단하다.
onAppear, onDisappear 단 이 두가지 밖에 없다.
그때 그때마다 데이터를 받고 화면을 그려주기 때문인 것 같다.
그러기 위한 다양한 Property Wrapper가 존재하는데 이를 설명해보려고한다.

@State

  • struct는 값타입이여서 값을 변경할 수 없다 근데, @State를 사용하면 값을 변경할 수 있게된다.
    struct ContentView: View {
    @State private var number = 0
    }
    
  • 대신, @State는 private으로 선언되여서 값을 공유하지 못한다.
  • 다른 view와 값을 공유하고싶으면, @Binding이나 @ObservedObject를 사용해야한다.

Binding

  • 부모 view의 @State와 같은 값을 양방향으로 연결되도록 한다. ~~~ struct ContentView: View {

    @State private var showAddView = false

    var body: some View { VStack { Button(“_AddView”) { showAddView = true } } .sheet(isPresented: $showAddView) { _AddView(isPresented: self.$showAddView) } } }

struct _AddView: View { @Binding var isPresented: Bool

var body: some View {
    Button("Dismiss") {
        self.isPresented = false
    }
} } ~~~ 데이터의 흐름을 보면, showAddView를 관찰하고 있다가,   버튼을 누르면 true로 바뀌고, 바뀜과 동시에 .sheet에 true가 전달되면서 _AddView로 가 나타나게된다.  그러면 Dismiss란 버튼이 나오고, 그 버튼을 누르면 false로 전환되면서 Binding되어있는 ContentView에 있는 showAddView에 false를 전달해주게된다. 그후, .sheet에 false가 전달이되고, 그후 화면이 내려가게된다.   여기서 내가 헷갈린점은, 부모뷰와 자식뷰이다. SiwftUI에서 아래깔린 뷰가 부모뷰, 위에 나오는뷰가 자식뷰인것이다.   헷갈리지말자.   나머진 글이 너무 길어져 2편으로 작성해야겠다.