按日期对映射数组进行排序SwiftUI



我正试图使用SwiftUI和AppPear包在图表中显示一些核心数据值(https://github.com/AppPear/ChartView)。

我的实体如下所示:

public class Data: NSManagedObject, Identifiable {
@NSManaged public var id: UUID
@NSManaged public var value: Double
@NSManaged public var valueDescription: String?
@NSManaged public var date: NSDate
}

目标是在图表中显示"值",以"日期"为x轴。

我已经能够在图表中显示我的"值",如下所示:

import SwiftUI
import SwiftUICharts
struct NSFetchArrayTest: View {
@FetchRequest(fetchRequest: Data.allDataFetchRequest()) var data: FetchedResults<Datas>
@Environment(.managedObjectContext) var managedObjectContext
var body: some View {
VStack {
LineView(data: data.map {$0.value}, title: "Test", legend: "None").padding()
}
.frame(minWidth: 300, maxWidth: .infinity, minHeight: 300, maxHeight: .infinity)
}
}

但是,现在"value"值是从低到高排序的。我希望它们根据"日期"属性进行排序。几个堆栈帖子建议添加:

sorted(by: { $0.date > $1.date })

这将导致:

LineView(data: data.map {$0.value}.sorted(by: { $0.date > $1.date }), title: "Test", legend: "None").padding()

这导致错误类型:

传递给不接受参数的调用的参数

这篇文章:Swift 3.0排序-传递给不接受参数的调用的参数表明了相同的错误类型,但我不知道如何修改/更改我的代码以使其工作。

有人有线索,或者有解决办法的想法吗?

您可以向@FetchRequest提供一个sortDescriptor,以便按照您希望的方式对结果进行排序。

您可以直接在@FetchRequest:中执行此操作

@FetchRequest(
entity: Datas.entity(), 
sortDescriptors: [
NSSortDescriptor(keyPath: Datas.date, ascending: false)
]
) var data: FetchedResults<Datas>

或在Data.allDataFetchRequest():内

let fetchRequest = NSFetchRequest<Datas>(entityName: "Datas")
let sort = NSSortDescriptor(key: Datas.date, ascending: false)
fetchRequest.sortDescriptors = [sort]

您可以通过更改ascending属性来更改顺序。

最新更新