일단 전체적으로 상태관리를 하고자하는 state를 저장한다.
state class
import Foundation
import Combine
class ObservableLogin : ObservableObject {
@Published var login = false
}
그리고 사용할 View에서 EnvironmentObject로 불러온다.
Main View
struct MainView: View {
@AppStorage("isChar") var isChar: Bool = false
@EnvironmentObject var loginState : ObservableLogin
var body: some View {
NavigationView{
if loginState.login{
ToDoView()
}else{
IntroView()
}
}
}
}
struct MainView_Previews: PreviewProvider {
static var previews: some View {
MainView().environmentObject(ObservableLogin())
}
}
이때 MainView의 상위 뷰에도 추가한다.
ProjectNameApp (sample)
import SwiftUI
@main
struct ProjectNameApp: App {
@EnvironmentObject var loginState : ObservableLogin
init() {
Thread.sleep(forTimeInterval: 2)
}
var body: some Scene {
WindowGroup {
MainView().environmentObject(ObservableLogin())
}
}
}
이렇게 하면 로그인 state에 따른 화면 렌더링이 가능해진다.
UserDefault로 휴대폰 local storage에 값을 저장했던 방식은 iOS14+ 이후로는 @AppStorage로 변경되고 더 간단하게 사용이 가능해졌다.
@AppStorage("login") var isChar: Bool = false