如何将 Core Data 与 Swift Charts 结合使用?

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

我正在做FetchRequest

@Environment(\.managedObjectContext) var managedObjContext
        @FetchRequest(sortDescriptors: [SortDescriptor(\.date, order: .reverse)]) 
var day: FetchedResults<Item>

然后我把它放在Charts中,但是Swift Charts需要Plottable,在我看来,没有办法转换它。

请帮忙!

尝试做这种事,但行不通。错误:无法将类型“() -> BarMark”的值转换为预期参数类型“(FetchedResults.Element) -> BarMark”(又名“(Item) -> BarMark”)。我想,我应该将我的核心数据转换为 Plottable,但我不知道该怎么做。

import SwiftUI
import Charts

struct ChartView: View {
    
    @Environment(\.managedObjectContext) var managedObjContext
    @FetchRequest(sortDescriptors: [SortDescriptor(\.date, order: .reverse)]) var day: FetchedResults<Item>
    @State var low = 0
    @State var top = 0
    @State var ir = 0
    @State var date = Date()
    
    var body: some View {
        
        Chart(day) {
            BarMark(
                x: .value("Day", low),
                y: .value("Sales", top)
            )
                
            }
        }
        
    }
swiftui core-data swiftui-charts plottable
1个回答
0
投票

我找到了非常简单的解决方案,代码:

struct ChartView: View {

@Environment(\.managedObjectContext) var managedObjContext
@FetchRequest(sortDescriptors: [SortDescriptor(\.date, order: .reverse)]) var items: FetchedResults<Item>
@State var low = 0
@State var top = 0
@State var ir = 0

func getDate(date: Date)->String {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "MMM dd"
    let stringDate = dateFormatter.string(from: date)
    return stringDate
}


var body: some View {
    Chart {
        ForEach(items.prefix(5)) { item in
            var dateInitial = getDate(date:(item.date!))
            LineMark(x: .value("date", "\(item.date)"), y: .value("hours slept", item.top))
                .cornerRadius(8.0)
                .annotation(position: .overlay, alignment: .top, spacing: 2.0) {
                    Text("\(item.top, specifier: "%.2f")")
                        .font(.system(size:10))
                        .foregroundColor(.white)
                        .fontWeight(.bold)
                }
        }
        
        
    }
}
}



struct ChartView_Previews: PreviewProvider {
static var previews: some View {
    ChartView()
}
}
© www.soinside.com 2019 - 2024. All rights reserved.