Сортировка сопоставленного массива по дате SwiftUI - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь отобразить некоторые значения базовых данных в диаграмме, используя 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' сортируются от низкого к высокому. Я хочу, чтобы они были отсортированы по атрибуту date. Несколько стековых сообщений предлагают добавить:

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 - аргумент, переданный для вызова, который не принимает аргументов предлагает тот же тип ошибки, но я понятия не имею, как изменить / изменить мой код, чтобы сделать его работа.

У кого-нибудь есть подсказка или идея для обхода?

1 Ответ

1 голос
/ 14 апреля 2020

Вы можете предоставить sortDescriptor для своего @FetchRequest, чтобы упорядочить результаты так, как вы хотите.

Вы можете сделать это прямо внутри вашего @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 Собственность.

...