我有一個名為 Car 的物體。
我有這個 @FetchRequest 來列出汽車。
@FetchRequest(
sortDescriptors: [NSSortDescriptor(keyPath: \Car.name, ascending: true)],
animation: .default)
var dishes: FetchedResults<Car>
這非常有效,但現在我想在視圖中添加一個搜索欄。
我知道 @FetchRequest 有這個語法
@FetchRequest(
sortDescriptors: [NSSortDescriptor(keyPath: \Car.name, ascending: true)],
predicate: // WTH I put here?,
animation: .default)
var dishes: FetchedResults<Dish>
我試圖創建一個名為 buildPredicate 的函式,如下所示:
func buildPredicate() -> NSPredicate {
if searchText == "" {
return NSPredicate(value: true)
}
return NSPredicate(format: "name CONTAINS[cd] %@", searchText)
}
但這是行不通的,因為要運行這個函式,我需要先創建 self,而 XCode 正在編譯代碼 self 尚未創建。
計算變數也是如此。
我知道有一種方法需要成為火箭科學家才能使用,我以前用過,使用類似這樣的方法
struct FetchedObjects<T, Content>: View where T : NSManagedObject, Content : View {
let content: ([T]) -> Content
var request: FetchRequest<T>
var results: FetchedResults<T>{ request.wrappedValue }
// MARK: - Lifecycle
init(
predicate: NSPredicate = NSPredicate(value: true),
sortDescriptors: [NSSortDescriptor] = [],
@ViewBuilder content: @escaping ([T]) -> Content
) {
self.content = content
self.request = FetchRequest(
entity: T.entity(),
sortDescriptors: sortDescriptors,
predicate: predicate
)
}
而不是 FetchRequest 但我想知道是否有更簡單的方法。
有沒有辦法為 @FetchRequest 構建一個有效的謂詞?
uj5u.com熱心網友回復:
使用.onChange(of:)您的搜索文本變數來構建您的謂詞并更新獲取請求
.onChange(of: searchText) { search in
if search.isEmpty {
dishes.predicate = NSPredicate(value: true)
} else {
dishes.predicate = NSPredicate(format: "name CONTAINS[cd] %@", search)
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/534968.html
標籤:迅速迅捷核心数据
