Reputation: 6908
I want to judge the coreData object with predicate filter is or is not empty, so I can get this object from web server or locally.
struct MyView: View {
@AppStorage("filter") private var filter = ""
@Environment(\.managedObjectContext) var moc
@State private var valueFilter = ""
var body: some View {
FilterValueView(filter: valueFilter)
.onAppear(perform: fetchValues)
}
func fetchValues() {
// Set the value filter by valueFilter
self.valueFilter = self.filter
// Check if the values is fetched from web server
// If empty fetch from web server, if not fetch locally.
// How to do it?
}
}
struct FilterValueView: View {
var fetchRequest: FetchRequest<Value>
var values: FetchedResults<Value> { fetchRequest.wrappedValue }
var body: some View {
List(values, id: \.self) { value in
...
}
}
init(filter: String) {
fetchRequest = FetchRequest<Value>(entity: Value(), sortDescriptors: [], predicate: NSPredicate(format: "value filter is %@", filter))
}
}
Upvotes: 1
Views: 77
Reputation: 257663
It is rather will be in FilterValueView
, because results of fetched data will be in it, so
struct FilterValueView: View {
var fetchRequest: FetchRequest<Value>
var values: FetchedResults<Value> { fetchRequest.wrappedValue }
var body: some View {
if values.isEmpty { // << here !!
Text("Loading...")
.onAppear {
// no data in local storage ...
// ... call fetch from web // << here !!
}
} else {
List(values, id: \.self) { value in
...
}
}
}
init(filter: String) {
fetchRequest = FetchRequest<Value>(entity: Value(), sortDescriptors: [], predicate: NSPredicate(format: "value filter is %@", filter))
}
}
Upvotes: 1