簡體   English   中英

使用 Bool 使用 SwiftUI 動態過濾 @FetchRequest - 顯示 true、false 或兩者

[英]Dynamically filtering @FetchRequest with SwiftUI using Bool - show true, false or both

我在 (ListView) 中的 SwiftUI 中有一個列表,可以從 Core Data 中提取數據。 我想動態過濾它。 我有一個這樣的 fetchRequest:

init(filter: Bool) {        
    fetchRequest = FetchRequest<Transaction>(entity: Transaction.entity(), sortDescriptors: [], predicate: NSPredicate(format: "income = %d", filter))
}

交易是具有屬性收入(布爾)的核心數據實體。

在 ContentView 中,我像這樣調用 ListView:

ListView(filter: incomeTypeFilter)

我有 3 個按鈕來更改過濾器(真或假,代表真=收入,假=費用):

Button("Show income") {
        self.incomeTypeFilter = true
}

Button("Show expenses") {
    self.incomeTypeFilter = false
}

Button("Show ALL") {
    // I don't know how to show ALL items in the list. Both true and false.
}

顯示收入和支出的按鈕工作。 他們將 self.incomeTypeFilter 更改為 true 或 false。 但是如何更改謂詞以顯示所有項目? 既真又假?

Ps 我的代碼基於本教程: Dynamically filtering @FetchRequest with SwiftUI

使用兩個 fetch 請求之一,一個有謂詞,一個沒有,並通過讓參數是可選的來確定使用哪一個

init(filter: Bool?) {
    if let filter = filter {        
        fetchRequest = FetchRequest<Transaction>(entity: Transaction.entity(), sortDescriptors: [], predicate: NSPredicate(format: "income = %d", filter))
    } else { 
        fetchRequest = FetchRequest<Transaction>(entity: Transaction.entity(), sortDescriptors: [])
    }
}

所以所有都對應於用 nil 調用 init

編輯:

后來:使 ContentView 中的incomeTypeFilter var 可選:

@State var incomeTypeFilter :Bool? = true

並像這樣制作 SHOW ALL 按鈕:

Button("Show ALL") {
    self.incomeTypeFilter = nil
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM