StateObject - TIL23

future0159 1월 22일 PM 06:32 3 0
future0159 Profile Image Level 9
1

StateObject

observable 객체를 인스턴스화 하는 property Wrapper이다.

StateObject와 ObservedObject의 차이점

struct testView: View {
    @StateOBject var example = sampleModel();
    @ObservedObject var exampleTwo = sampleModel();
    var body: some View {
        subView()
        .environmentObject(example)
    }
}

둘다 ObservableObject를 conform하는 class에서 감시 대상으로 선정할 때 사용되는 property Wrapper로서, 내부에 선언된 변수중 @Published를 property wrapper가졌을때 해당 변수가 변경되면 뷰를 리로딩한다.
하지만 ObservedObject와 StateObject사이에는 차이점이 존재한다.
애플 공식문서에 따르면, SwiftUI는 뷰를 계속해서 다시 만들어내기 때문에, 주어진 입력값들을 가지고 시작할때 항상 같은 뷰를 나타내야 한다.
그러나 observed object는 매번 새로 view를 init하기 때문에 안전하지 않다. 그리하여 이러한 목적으로 인해 SwiftUI는 StateObject를 제공한다. 결국 둘의 차이점은 부모뷰가 업데이트 되었을때 ObservedObject는 값이 초기화 되고, Stateobject는 값이 유지된다는 점이다.

댓글