ios - 使用 Bool 使用 SwiftUI 动态过滤 @FetchRequest - 显示真、假或两者
问题描述
我在 (ListView) 中的 SwiftUI 中有一个从核心数据中提取数据的列表。我想动态过滤它。我有一个这样的 fetchRequest:
init(filter: Bool) {
fetchRequest = FetchRequest<Transaction>(entity: Transaction.entity(), sortDescriptors: [], predicate: NSPredicate(format: "income = %d", filter))
}
Transaction是一个具有属性income (Bool) 的核心数据实体。
在 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
解决方案
使用两个获取请求之一,一个带有谓词,一个没有谓词,并通过让参数为可选来确定要使用哪个
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
}
推荐阅读
- android - 无法解决:构建 gradle 时出现 transition-1.2.0 错误
- python - 在 python pandas 中创建一个日期向量
- bash - 更改 maven settings.xml 位置并自动传递 -s
- c++ - C++ 中的 Arduino CSS RGB 十六进制颜色解析
- java - 如何修复“项目中的测试源文件夹必须有一个不用于主要资源的输出文件夹”?
- azure-machine-learning-service - AzureML RL 是否支持 PyTorch?
- sql - 在 PostgreSQL 的大表中执行删除查询的最快方法
- c# - 按住修饰键时,所有 WPF 上下文菜单似乎都无法正确处理突出显示的项目
- mysql - Mysql:如何从另一个数据库表更新表结构?
- mysql - Laravel 6 on Migration: SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint