core-data - 从过滤的提取请求中求和双倍?
问题描述
import SwiftUI
import Foundation
import CoreData
struct FilteredList: View {
var fetchRequest: FetchRequest<FeedList>
var value: FetchedResults<FeedList> {
fetchRequest.wrappedValue
}
var total: Double = 0.0
var body: some View {
ForEach(value, id: \.self) {value in
Text("Feed quantity is: \(value.feedquant.reduce(0) { $0 + $1.value}) ")
}
}
init(filter: String) {
fetchRequest = FetchRequest<FeedList>(entity:
FeedList.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \FeedList.compdate, ascending: false)],
predicate: NSPredicate(format: "compdate == %@", filter))
}
}//: View
我的 CoreData 中有两个属性。Compdate 存储为日期字符串,feedquant 存储为双精度值。我能够过滤以通过 init 获取今天值的获取请求,但我无法以不会导致错误的方式对属性求和。像上面一样,在视图中求和的任何尝试都会导致
类型“()”不能符合“AccessibilityRotorContent”。- 或 - 类型“()”不符合“视图”
到目前为止,当我不得不通过另一个属性过滤时,没有任何 stackoverflow 解决方案适用于我在核心数据中对一个属性求和的情况。
解决方案
您似乎错误地编写了上面的代码。在您的ForEach
中,您有一个变量value
,它必须是一个集合(我假设您的结果FetchRequest
),但它没有在任何地方定义。为了这个答案,我假设第一次使用的value
实际上应该是singer
.
@Fogmeister 对于您在错误消息方面遇到的问题是正确的。你必须有一个View
并且你的代码没有提供一个。但是,在尝试使用时,您仍然遇到另一个更深层次的问题reduce()
您使用的问题reduce()
是您CoreData
设置模型的方式。您有一个具有和属性的Entity
权利。FeedList
date
feedquant
当你进入你的ForEach
,singer
是一个集合,但value
它是一个单独的托管对象,它只是 aString
和 a Double
,但你必须reduce
在一个集合上使用,而不是 a Double
。
您需要重新考虑您的CoreData
实施。就个人而言,我将有两个具有关系的实体。第一个是Date
,第二个是FeedQuant
。FeedQuant
会有一个属性value
是Double
. Date
然后我会在和之间建立一对多的关系Feedquant
。从Date
我称之为hasFeedquant
,反之亦然hasDate
。
除了实体是实体之外,您FetchRequest
将保持不变Date
,但现在您将获得hasFeedquant
一个集合关系,然后您可以对其使用 reduce。
您的代码将是:
struct FilteredList: View {
var fetchRequest: FetchRequest<FeedList>
var feedDate: FetchedResults<Date> {
fetchRequest.wrappedValue
}
var total: Double = 0.0
var body: some View {
ForEach(feedDate, id: \.self) {value in
// value.hasFeedquant is a Set<Feedquant> and so is reducible
Text("Feed quantity is: \(value.hasFeedquant.reduce(0) { $0 + $1.value)") }
}
}
init(filter: String) {
fetchRequest = FetchRequest<Date>(
entity: FeedList.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \Date.compdate, ascending: false)],
predicate: NSPredicate(format: "compdate == %@", filter)
)
}
} //: View
推荐阅读
- android - android.support.design.chip.Chip
- python - 使用 Python 进行 Web Scraping - 获取属性值的问题
- angularjs - json文件的严格数据类型
- push-notification - 是否可以检查谷歌日历api中的活动频道是否正在观看资源?
- yii2 - 更改 yii2 中模块的默认控制器
- swift - 计算字符串 Swift 中的字母出现次数
- python - 如何保存包含 keras 模型的对象?
- ios - URLSession的正确用法是什么,创建新的或重复使用相同的
- macos - 自定义 iCal 日历未在 Mac 上创建通知
- phpstorm - 如何在 PhpStorm 的工具下为“启动 SSH 会话...”创建快捷方式