이전 글에서 SwiftUI / @StateObject, @ObservedObject, @EnvironmentObject 내용을 살펴보면서 Data Model을 사용하기 위한 내용을 살펴봤습니다.
이번 글을 통해 앞선 다양한 프로퍼티래퍼를 사용하여 SwiftUI 에서 iOS16 기준
으로 View
와 Data Model
을 사용하여 앱을 구현하는 내용을 살펴보겠습니다.
Apple Developer 문서에 표현된 Monitoring data changes in your app 탐방
https://developer.apple.com/documentation/swiftui/monitoring-model-data-changes-in-your-app
class Book: ObservableObject {
@Published var title = "Sample Book Title"
let identifier = UUID() // A unique identifier that never changes.
}
struct BookView: View {
@ObservedObject var book: Book
var body: some View {
BookEditView(book: book)
}
}
struct BookEditView: View {
@ObservedObject var book: Book
// ...
}
struct LibraryView: View {
@StateObject private var book = Book()
var body: some View {
BookView(book: book)
}
}
@main
struct BookReader: App {
@StateObject private var library = Library()
// ...
}
@main
struct BookReader: App {
@StateObject private var library = Library()
var body: some Scene {
WindowGroup {
LibraryView()
.environmentObject(library)
}
}
}
struct LibraryView: View {
@EnvironmentObject var library: Library
// ...
}
struct LibraryView_Previews: PreviewProvider {
static var previews: some View {
LibraryView()
.environmentObject(Library())
}
}
struct BookEditView: View {
@ObservedObject var book: Book
var body: some View {
TextField("Title", text: $book.title)
}
}
추가로 iOS17 이상의 경우 애플이 새롭게 소개하는 @Observable 프로퍼티래퍼를 사용한 Managing model data in your app 내용을 참고하면 되겠습니다.
그리고 위 내용을 토대로 작성된 경우 Migrating from the Observable Object protocol to the Observable macro 내용을 참고하여 @Observable 프로퍼티래퍼를 사용한 형식으로 변경하면 되겠습니다!