Issue #988
When working with Core Data, there are times we have optional NSManagedObject
to pass around. These objects conform to ObservableObject
, and in SwiftUI we can’t @ObservedObject
on optional ObservableObject
One way we can workaround this is to introduce a wrapper type that checks and internally observes the ObservableObject
struct ObserveView<T: ObservableObject, Content: View>: View {
var object: T?
@ViewBuilder var content: (T) -> Content
struct InnerView: View {
@ObservedObject var object: T
var content: (T) -> Content
var body: some View {
content(object)
}
}
var body: some View {
if let object {
InnerView(object: object, content: content)
}
}
}
@ViewBuilder
func observe<T: ObservableObject, Content: View>(_ object: T?, @ViewBuilder content: @escaping (T) -> Content) -> some View {
ObserveView(object: object, content: content)
}
So we can use like
var book: Book?
observe(book) { book in
Text(book.name)
}
Start the conversation