개발

SwiftUI) @AppStorage 프로퍼티를 아세요? UserDefaults를 이용하여 화면 갱신 시키는 방법!!!

소소ing 2022. 5. 10. 16:33
반응형

@State 를 이용하여 화면 갱신을 알아 보았다. 

그럼 iOS에서 많이 사용하는 UserDefaults값을 이용한 화면 갱신을 손쉽게 할 수 있을까? 이럴때 사용하는 것이 @AppStorage 프로퍼티이다.

다만 iOS 14 이상에서만 사용이 가능하다!!

 

예전에 살펴본 @State 변수를 통한 화면 이동 부분을 @AppStorage 사용해서 구현하면 다음과 같다.

@AppStorage 프로퍼티 래퍼를 사용하면, UserDefaults 를 마치 SwiftUI @State 처럼 사용할 수 있게 되는것이다.

즉 @State 변수 값을 바꾸듯 값을 바꾸면, @AppStorage 프로퍼티 래퍼가 UserDefaults의 바뀐 값을 처리해주고, 화면을 새로 갱신해준다.

 

@AppStorage 프로퍼티는 화면 갱신을 구분짓는 UserDefaults 변수에 사용하면 효과적일 듯 하다.

(로그인 여부에 따른 처리 로직 등등...)

import SwiftUI

struct SplashView: View {
   @AppStorage("isGoMain") var isGoMain : Bool = UserDefaults.standard.bool(forKey: "isGoMain")
    
    var body: some View {
        // @AppStorage 프로퍼티 변수 값 변경으로 SplashView의 body 부분이 다시 호출되어 MainView를 호출한다.
        if isGoMain {
            MainView()
        } else {
            VStack {
                Spacer().frame(height: 189)
                Image("logo")
                    .resizable()
                    .scaledToFit()
                    .frame(width: 198, height: 35)
                Spacer()
            }
            // 화면이 보여질때 호출되는 함수 - 최초 View 진입에서도 호출된다.
            .onAppear {
                // 몇 초 뒤 또는 기타 액션을 수행하는 로직을 넣고 조건이 충족될때 isGoMain 변수값을 변경하면 SplashView의 body 부분이 다시 호출되는 효과가 발생된다.
                isGoMain = true
            }
        }
    }
}

struct SplashView_Previews: PreviewProvider {
    static var previews: some View {
        SplashView()
    }
}

 

반응형