Передача базовых данных FetchedResults <T>для предварительного просмотра в SwiftUI - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть родительское представление, которое выполняет @FetchRequest и передает FetchedResults<T> дочернему представлению. Все работает, и дочерний вид способен анализировать через FetchedResults. Однако я не могу понять, как настроить данные так, чтобы структура Preview ребенка работала. Как правильно настроить некоторые постоянные данные в структуре Preview, чтобы я мог создать экземпляр дочернего представления и передать FetchedResults<T>?

1 Ответ

0 голосов
/ 29 апреля 2020

Поскольку FetchedResults<T> является RandomAccessCollection, а массив swift также является RandomAccessCollection, здесь возможное решение.

Протестировано с Xcode 11.4 / iOS 13.4

struct ContentView: View {
    @Environment(\.managedObjectContext) var context
    @FetchRequest(entity: Person.entity(), sortDescriptors: [])
        var result: FetchedResults<Person>

    var body: some View {
        VStack(alignment: .leading) {
            Text("Persons").font(.title)
            PersonsView(results: result) // FetchedResults<Person> is a collection
        }
    }
}

// generalize PersonsView to depend just on collection
struct PersonsView<Results:RandomAccessCollection>: View where Results.Element == Person {
    let results: Results
    var body: some View {
        ForEach(results, id: \.self) { person in
            Text("Name: \(person.name ?? "<unknown>")")
        }
    }
}

struct ChildView_Previews: PreviewProvider {
    static var previews: some View {
        PersonsView(results: [Person()]) // << use regular array to test
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...