개인공부

SwiftUI_ onAppear, onDisapear

h_luz 2024. 7. 22. 17:41

.onAppear

: 화면에 표시될 때 onApear 실행

 

.onDisappear

: 화면에서 사라질 때 onDisappear 실행

 

import SwiftUI

struct OnAppearPractice: View {
    
    @State var myText: String = "Start text."
    @State var count: Int = 0
    
    var body: some View {
        NavigationView {
            ScrollView {
                Text(myText)
                
                LazyVStack {
                    ForEach(0..<50) { _ in
                        RoundedRectangle(cornerRadius: 25.0)
                            .frame(height: 200)
                            .padding()
                            .onAppear {
                                count += 1
                            }
                    }
                }
            }
            .onAppear(perform: {
                DispatchQueue.main.asyncAfter(deadline: .now() + 5, execute: {
                    myText = "This is new Text"
                })
            })
            .onDisappear(perform: {
                myText = "Ending Text."
            } )
            .navigationTitle("OnAppear : \(count)")
        }
    }
}

#Preview {
    OnAppearPractice()
}

* onAppear과 onDisappear은 어느 곳에 위치시키는지에 따라서 결과가 달라져서 매우 중요

예를 들어 위 코드에는 ScrollView에 onApear이 위치해서 ScrollView가 나타날 때 onAppear 실행

 

*LazyVStack

: 한 번에 로드되지 않고, 화면에 나타날 때 로드된다.

ex) 스크롤뷰에 50개의 RoundedRectangle이 나타나도록 ForEach문으로 설정해 주었는데 count에는 처음에는 3개로 표시될 것이다 왜냐하면 LazyVStack은 화면에 나타날 때 로드되기 때문에 화면에 3개가 보이면 3 count

 

*DispatchQueue

: 작업(task)들을 비동기적으로 또는 동기적으로 실행하는 대기열(queue)입니다.
  작업들을 순서대로 실행하거나 동시에 실행할 수 있습니다.

 

 

 

'개인공부' 카테고리의 다른 글

SwiftUI_ @Environment  (0) 2024.07.23
SwiftUI _ @State, @Binding  (1) 2024.07.22
SWiftUI _ MapKit  (1) 2024.07.20
WanderBoard _ 최종프로젝트 회고  (1) 2024.07.12
SwiftUI  (0) 2024.07.07