개발
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()
}
}
반응형