Как суммировать отфильтрованные значения базовых данных (используя предикат) в приложении SwiftUI?
У меня есть 1 объект с именем NPTransaction . Он имеет 5 атрибутов, и я хотел бы суммировать значения из атрибута с именем value (целое число 64) . По сути, это будет суммировать значения дохода в выбранном месяце (сейчас он установлен на текущую дату () в коде примера, но позже он будет установлен на весь текущий месяц).
Я нашел похожие Вопрос относительно Swift, но я не могу заставить этот код работать в моем приложении. Ссылка на связанный вопрос: Как суммировать числа (Int16) сохраненных базовых данных - Swift 3
Основываясь на коде по ссылке, у меня сейчас следующий код:
import SwiftUI
struct DashboardView: View {
@Environment(\.managedObjectContext) var managedObjectContext
@State var selectedDate = Date()
// This code in private var below produces many errors like:
// Value of type 'AppDelegate' has no member 'managedObjectContext'
// Use of undeclared type 'NSEntityDescription'
// Use of undeclared type 'NSFetchRequest'
// - so I assume that this linked question may be outdated or I should take different approach using SwiftUI
private var income: Int64 {
let context = (UIApplication.shared.delegate as! AppDelegate).managedObjectContext
let entityDesc: NSEntityDescription = NSEntityDescription.entity(forEntityName: "NPTransaction", in: context)!
let request: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest()
request.entity = entityDesc
request.predicate = NSPredicate(format: "date == %@", selectedDate)
let records = try! context.fetch(request)
try! context.fetch(request) as! [NSManagedObject]
let monthlyIncome = result.reduce(0) { $0 + ($1.value(forKey: "value") as? Int64 ?? 0) }
return monthlyIncome
}
var body: some View {
NavigationView {
VStack {
Text("Monthly income:")
Text("\(income) USD")
}
// more code...
Я только изучаю Swift и SwiftUI, так что, может быть, есть лучший и совершенно другой способ решения этой проблемы?