我有两种模型,一种用于盆景,一种用于任务:
@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 日期,最后,任务日期减去实际日期等于任务剩余天数。
我玩过过滤器,但我无法让它工作。有解决办法吗?
我找到了正确的过滤器。
我的解决方案:
let getTask = taskModel.filter({ $0.bonsai == bonsai })
let actualTasks = getTask.last
let taskDue = taskDate?.isDue