【问题标题】:Sorting mapped array on date SwiftUI在日期 SwiftUI 上对映射数组进行排序
【发布时间】:2020-07-27 02:39:08
【问题描述】:

我正在尝试使用 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)
    }

}

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

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 sort - Argument passed to call that takes no arguments 提出了相同的错误类型,但我不知道如何修改/更改我的代码以使其正常工作。

有没有人知道解决方法或想法?

【问题讨论】:

    标签: arrays sorting charts mapping swiftui


    【解决方案1】:

    您可以向 @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 属性来更改顺序。

    【讨论】:

    • 您,先生/女士,绝对是一个传奇!我显然在寻找错误的地方来进行排序。成功了,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 2016-09-30
    • 1970-01-01
    相关资源
    最近更新 更多