UITableViewDataSourcePrefetching в SwiftUI - PullRequest
0 голосов
/ 18 июня 2019

В UIKit у нас есть UITableViewDataSourcePrefetching (https://andreygordeev.com/2017/02/20/uitableview-prefetching/).

. Я хочу сделать что-то подобное в SwiftUI, чтобы показать большую коллекцию данных, где все это не может быть в памяти вв то же время.

Я придумал решение, где невидимый прямоугольник имеет обратный вызов .onAppear, который обрабатывает загрузку большего количества данных. Проблема в том, что это делает процесс довольно медленным, так как данные нефактически предварительно выбран, но загружается только тогда, когда мы достигаем точки в таблице.

struct ContentView: View {

    @ObjectBinding var elements: [Int]

    var body: some View {
        ForEach(elements.identified(by: \.self)) { element in
            Text("\(element)")
        }
        Rectangle().opacity(0).onAppear {
            // Add more data
        }
    }
}

Я хотел бы иметь возможность добавить это событие .onAppear в более ранний элемент, созданный ForEach, для фактического извлеченияданные до того, как мы достигнем конца текущих данных.

Еще одна альтернатива, о которой я подумал, - создать собственную коллекцию, которая в своей функции нижнего индекса загружает больше данных при обращении к одному из последних признаков.это решение заключается в том, что SwiftUI получает доступ ко всем признакам при первоначальной загрузке View.

1 Ответ

0 голосов
/ 18 июня 2019

Вы можете попробовать использовать индекс внутри ForEach, как здесь

ForEach(0..<store.repos.count) { index in
                if (self.store.repos.count - index < 10) {
                    RepoRow(repo: self.store.repos[index])
                        .onAppear(perform: self.fetchNextPage)
                } else {
                    RepoRow(repo: self.store.repos[index])
                }
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...