Problem
iOS14からは @StateObject
が使えるので、Viewの中でObservableObjectをインスタンス化させることができます。
LibraryView.swift
struct LibraryView: View {
@StateObject var book = Book()
var body: some View {
BookView(book: book)
}
}
参考: Instantiate a Model Object in a View
ただ、iOS13では@StateObject
が使えないので、別の方法を考える必要があります。
Solution
Stackoverflowに解決策を書いている人がいました。
https://stackoverflow.com/a/62007843
親のView(LibraryView)で @State
でObservableObjectをインスタンス化し、子View(LibraryViewImpl)に渡すようにすれば良さそうです。
LibraryView.swift
struct LibraryView: View {
@State var book = Book()
var body: some View {
LibraryViewImpl(book: book)
}
}
private struct LibraryViewImpl: View {
@ObservedObject var book: Book
var body: some View {
BookView(book: book)
}
}