SwiftUI

StateObject

삼쓰_웅쓰 2023. 1. 28. 14:01
반응형
ObservableObject를 인스턴스화 하는 프로퍼티 래퍼

 

SwiftUI 는 각 객체가 생성될 때 한 번만 새로운 객체를 생성하고,
ObservableObject 의 @Published 프로퍼티가 바뀔 때 관련 뷰를 업데이트 합니다.

아래와 같이 사용할 수 있습니다.

class Book: ObservableObject {
    @Published var title = "Great Expectations"
}

struct BookView: View {
    @StateObject var book: Book
    
    var body: some View {
        Text(book.title)
    }
}

state object를 ObservedObject attribute 를 갖는 프로퍼티로 넘길 수도 있지만,
environmentObject(_:) modifier를 사용해 뷰 환경 객체로 추가할 수도 있습니다.

프로퍼티로 넘기기

class Book: ObservableObject {
    @Published var title = "Great Expectations"
}

struct BookView: View {
    @StateObject var book: Book
    
    var body: some View {
        BookTitle(book: book)
    }
}

struct BookTitle: View {
    @StateObject var book: Book
    
    var body: some View {
        Text(book.title)
    }
}

 

environmentObject 활용해서 전달

class Book: ObservableObject {
    @Published var title = "Great Expectations"
}

struct BookView: View {
    @StateObject var book: Book
    
    var body: some View {
        BookTitle()
            .environmentObject(book)
    }
}

struct BookTitle: View {
    @EnvironmentObject var book: Book
    
    var body: some View {
        Text(book.title)
    }
}
반응형