:今
let amountExpr = NSExpression(forKeyPath: "amount")
let sumExpr = NSExpression(forFunction: "sum:", arguments: [amountExpr])
let sumDescr = NSExpressionDescription()
sumDescr.expression = sumExpr
sumDescr.name = "sumOfAmount"
sumDescr.expressionResultType = .doubleAttributeType
let dateExpr = NSExpression(forKeyPath: "date")
let dateDescr = NSExpressionDescription()
dateDescr.expression = dateExpr
dateDescr.name = "date"
dateDescr.expressionResultType = .dateAttributeType
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Transaction")
request.sortDescriptors = Transaction.defaultSortDescriptors
request.propertiesToFetch = [dateDescr, sumDescr]
request.propertiesToGroupBy = [dateDescr]
request.resultType = .dictionaryResultType
request.returnsObjectsAsFaults = false
request.predicate = Transaction.rangeOfDatesPredicate(dateRange: Date.week())
let results = try! context.fetch(request) as! [NSDictionary]
for value in results {
print(value)
}
value
は、値としてキーとの和として日付と辞書になります。
注:この作品を作るために、私は、そうでない場合は、すべての日付が異なるだろう、コアデータに追加されたすべての日を同じにするための時間を調整する必要があります。
extension Date {
static func current() -> Date {
let calendar = Calendar.current
var components = calendar.dateComponents([.year, .month, .day], from: Date())
components.hour = 00
components.minute = 00
components.second = 00
return calendar.date(from: components)!
}
}
'sum'を使って' propertiesToGroupBy'を設定すると、アプリケーションは単に結果を収穫するだけで、DB内の作業を行います。結果のコードは読みやすくなります。 – dasblinkenlight
これを行う方法の例がありますか?私はpropertiesToGroupByを使用しようとしましたが、私は結果の型を辞書に設定しなければなりません。 – Kobe
[ここでは、 'propertiesToGroupBy'(http://stackoverflow.com/a/28014825/335858)で合計を計算する方法を示すQ&Aです。 – dasblinkenlight