过滤器问题?无法通过日期获取和计算

问题描述 投票:0回答:1

我有两种模型,一种用于盆景,一种用于任务:

@Model
final class BonsaiModel {
    var uuid: UUID
    var timestamp: Date
    var purchased: Date
    var price: Int
    var name: String
    var isFavorite: Bool
    var age: Int

    @Attribute(.externalStorage)
    var bonsaiImageData: Data?

    @Relationship(deleteRule: .nullify, inverse: \CategoryModel.bonsai)
    var category: CategoryModel?
    @Relationship(deleteRule: .nullify, inverse: \SpeciesModel.bonsai)
    var species: SpeciesModel?

    @Relationship(deleteRule: .cascade, inverse: \TaskModel.bonsai)
    var newTaskModel: [TaskModel] = []

    @Relationship(deleteRule: .cascade, inverse: \BonsaiImageModel.bonsai)
    var bonsaiImages: [BonsaiImageModel] = []

    init(name: String = "",
         isFavorite: Bool = false,
         bonsaiImageData: Data? = nil
    ) {
        self.uuid = UUID()
        self.timestamp = Date()
        self.purchased = Date()
        self.price = Int()
        self.name = name
        self.isFavorite = isFavorite
        self.age = 2023
        self.bonsaiImageData = bonsaiImageData

    }

}

@Model
final class TaskModel {
    var uuid: UUID
    var name: String
    var timestamp: Date
    var isComplete: Bool
    @Relationship(deleteRule: .nullify, inverse: \CareTypeModel.newTask)
    var careType: CareTypeModel?
    var isDue: Date

    var bonsai: BonsaiModel?

    init(
        name: String = "",
        isComplete: Bool = false
    ){
        self.uuid = UUID()
        self.name = name
        self.timestamp = Date()
        self.isComplete = isComplete
        self.isDue = Date()
    }
}

一个盆景可以有多个任务。一切正常。

现在,我想显示直到给定盆景的下一个任务到期为止的天数。

在我的视图(重构)中,我得到的数据如下:

@Environment(\.locale) private var locale
    @State var bonsai = BonsaiModel() // To get me one Bonsai.
    @Query private var taskModel: [TaskModel] // To get all Tasks.

我的想法是,获取所有任务,然后过滤任务以获得盆景。 接下来获取 isDue 日期,最后,任务日期减去实际日期等于任务剩余天数。

我玩过过滤器,但我无法让它工作。有解决办法吗?

date swiftui filter swift-data
1个回答
0
投票

我找到了正确的过滤器。

我的解决方案:

 let getTask = taskModel.filter({ $0.bonsai == bonsai })
                            let actualTasks = getTask.last
                            let taskDue = taskDate?.isDue
© www.soinside.com 2019 - 2024. All rights reserved.