[Swift] ObservableObject ~ EnvironmentObject 사용법 메모

임클·2023년 4월 30일
0

Swift

목록 보기
29/37
post-thumbnail
post-custom-banner

일단 전체적으로 상태관리를 하고자하는 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
profile
iOS를 공부하는 임클입니다.
post-custom-banner

0개의 댓글