투케이2K

350. (ios/SwiftUI) [SwiftUI] [iOS 17] onAppear, onDisappear, onChange 사용해 뷰 라이프 사이클 (life cycle) 확인 본문

IOS

350. (ios/SwiftUI) [SwiftUI] [iOS 17] onAppear, onDisappear, onChange 사용해 뷰 라이프 사이클 (life cycle) 확인

투케이2K 2023. 10. 18. 21:24

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT5

 

[소스 코드]

import SwiftUI

struct ContentView: View {
    
    
    
    /**
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * TODO [클래스 설명]
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * 1. 앱 View : 앱이 사용자 인터페이스로 표시하는 뷰 계층 구조가 포함
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * 2. 실제 사용자에게 표시되는 화면 구성 실시
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * */





    /**
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * //  TODO [빠른 로직 찾기 : 주석 로직 찾기]
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     *
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     *
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     *
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     *
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     *
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     *
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     *
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     *
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     *
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     *
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     *
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     *
     * // -----------------------------------------------------------------------------------------------------------------------------------------------------------------
     * */
    
    
    
    
    
    // -----------------------------------------------------------------------------------------
    // MARK: - [전역 변수 선언]
    // -----------------------------------------------------------------------------------------
    @Environment(\.scenePhase) private var scenePhase
    
    private static let ACTIVITY_NAME = "ContentView"

        
        
        
        
    
    // -----------------------------------------------------------------------------------------
    // MARK: - [화면에 표시되는 시각적 요소 정의 실시]
    // -----------------------------------------------------------------------------------------
    var body: some View {
        VStack {
            Image(systemName: "globe")
                .imageScale(.large)
                .foregroundStyle(.tint)
            Text("Hello, world!")
        }
        .onAppear {
            S_Log._D_(description: "onAppear :: 뷰 화면 표시", data: nil)
        }
        .onDisappear {
            S_Log._D_(description: "onDisappear :: 뷰 종료 상태", data: nil)
        }
        .onChange(of: scenePhase) {
            if String(describing: scenePhase).lowercased() == "active" {
                S_Log._D_(description: "onChange :: active :: 뷰 포그라운드 전환", data: nil)
            }
            else if String(describing: scenePhase).lowercased() == "background" {
                S_Log._D_(description: "onChange :: background :: 뷰 백그라운드 전환", data: nil)
            }
            else if String(describing: scenePhase).lowercased() == "inactive" {
                S_Log._D_(description: "onChange :: inactive :: 뷰 상태 변화 감지", data: nil)
            }
            else {
                S_Log._D_(description: "onChange :: else :: 뷰 else 상태", data: [String(describing: scenePhase)])
            }
        }
        .padding()
    }
    
} // [클래스 종료]
 

[결과 출력]

 

================================================================
LOG :: CLASS PLACE :: ContentView.swift :: body :: 85
-------------------------------------------------
LOG :: NOW TIME :: 2023-10-18 21:19:22
-------------------------------------------------
LOG :: DESCRIPTION :: onChange :: active :: 뷰 포그라운드 전환
================================================================

 

반응형
Comments