인프런 커뮤니티 질문&답변

실눈개발자님의 프로필 이미지
실눈개발자

작성한 질문수

[Lv.1] 누구나 할 수 있는 - SwiftUI Basic with iOS 17

@EnvironmentObject

MVVM에서 처음

해결된 질문

작성

·

145

0

import SwiftUI

@main
struct mountainApp: App {


    var body: some Scene {
        WindowGroup {
            AuthView()
                .environmentObject(AuthViewModel())
        }
    }
}

 

1번 경우에는 @StateObject 없이 바로 AuthViewModel 객체로 environmentObject에 넣어주면 문제가 발생하나요?

답변 1

0

Jacob(제이콥)님의 프로필 이미지
Jacob(제이콥)
지식공유자

안녕하세요 실눈개발자님.

먼저 답변하자면, @StateObejct 를 사용해서 초기화된 Viewmodel을 .environmentObject 에 넘겨줘야 합니다. 올려주신 코드로 작성해서 ViewModel 을 넘겨줘도 당장 Error 는 발생되지는 않지만 여러 View 와 연계되서 @EnviromentObject 로 ViewModel 과 Binding 시에 추후에 View 가 업데이트 되면서 데이터흐름상 충돌하게 되어 APP 에서 Error 가 발생됩니다. @StateObejct 를 사용하게 되면 생성된 객체(instance) 는 View 라이프사이클에 상관 없이, SwiftUI View 와 별개의 메모리 곤간에 저장해 데이터를 안전하게 보관하는 상태값을 Reference 해주는 역활을 하기때문에 나중에 충돌을 방지 할수 있습니다.

 

아래와 같이 프로젝트 진행하시면 될꺼 같습니다.

감사합니다

import SwiftUI

@main
struct mountainApp: App {
     
    @StateObject var vm: AuthViewModel = .init()
     
    var body: some Scene {
        WindowGroup {
            AuthView()
                .environmentObject(vm)
        }
    }
}

 

실눈개발자님의 프로필 이미지
실눈개발자

작성한 질문수

질문하기