ios - 按“isComplete”过滤数组
问题描述
我有两个数据集“ProjectItem”和“TaskItem”,一个项目可以有很多任务。我想在他们所属的项目中通过“isComplete”过滤任务。
在我的 ProjectItem+CoreDataProperties 文件中,我有以下内容:
extension ProjectItem {
@NSManaged public var projectColor: String
@NSManaged public var projectId: UUID
@NSManaged public var projectTitle: String
@NSManaged public var projectDateCreated: Date
@NSManaged public var isFavorite: Bool
@NSManaged public var task: NSSet
public var taskArray: [TaskItem] {
let set = task as? Set<TaskItem> ?? []
-- How can I filter for "isComplete" here? --
}
}
TaskItem+CoreDataProperties 看起来像这样:
extension TaskItem {
@NSManaged public var completedDate: Date
@NSManaged public var completeIcon: String
@NSManaged public var createdDate: Date
@NSManaged public var dueDate: Date
@NSManaged public var id: UUID
@NSManaged public var isComplete: Bool
@NSManaged public var notes: String
@NSManaged public var priority: String
@NSManaged public var title: String
@NSManaged public var project: ProjectItem?
}
如何修改第一个代码片段中的数组以仅显示“isComplete”= true 的任务?
非常感谢!
解决方案
您不再需要使用动态定义 Coredata 托管属性NSSet
。您也可以使用具有Element
类型的泛型集,并且核心数据能够从底层存储中推断出类型。所以,你的班级可以改成这样,
extension ProjectItem {
@NSManaged public var projectColor: String
@NSManaged public var projectId: UUID
@NSManaged public var projectTitle: String
@NSManaged public var projectDateCreated: Date
@NSManaged public var isFavorite: Bool
// Notice this
@NSManaged public var task: Set<TaskItem>
}
因此,对于已完成的任务项目,您可以根据需要简单地使用过滤器Set
。
extension ProjectItem {
var completedItems: Set<TaskItem> {
return task.filter(\.isComplete) // for 5.2 and above
}
}
推荐阅读
- eclipse - Git bash 给出错误“SSL 证书问题:无法获取本地颁发者证书”
- r - r中具有多个条件的switch语句
- r - 在数据框中搜索两列
- function - PowerShell ISE 中的 Powershell 函数行为
- julia - 解释 = \ Julia 中的运算符,渐变,速记
- sql - 仅当有足够的记录时才返回结果
- java - Java / LibGDX 缩放问题
- c# - How to update dynamically a textBox with the range when user makes a selection in Excel. C#
- python - Discord.py Rewrite custom errors
- java - 反射 API + 注释:如何发送类继承者作为参数?