#list #foreach #swiftui #completion
#Список #foreach #swiftui #завершение
Вопрос:
Я конвертирую имеющийся у меня список с выбранными элементами через блок завершения в список SwiftUI. Вот с чем я сейчас работаю:
struct MoreView: View {
private let seasonArray = [Season]()
var body: some View {
List {
ForEach(seasonArray, id:.self) { season in
Text(season.name)
}
}
}
private mutating func fetchSeasons() {
ContentManager().getSeasons() { response in
seasonArray = response.sorted { $0.year < $1.year }
// Reloaded tableview in UIKit here
}
}
}
Как лучше всего заполнить список с помощью seasonArray
var после fetchSeasons()
выполнения и возврата?
Ответ №1:
Вы можете установить @State
оболочку свойства для seasonArray и присвоить ему пустое значение по умолчанию. Когда вы вызываете fetchSeasons
функцию, она должна автоматически перезагрузить ваше представление без необходимости неявной перезагрузки, потому что SwiftUI прослушивает изменения для seasonArray как @State
свойство.
Вы должны создать экземпляр ContentManager
один раз, как константу.
struct MoreView: View {
private let contentManager = ContentManager()
@State private var seasonArray: [Season] = []
var body: some View {
List {
ForEach(seasonArray, id:.self) { season in
Text(season.name)
}
}
}
private func fetchSeasons() {
contentManager.getSeasons() { response in
DispatchQueue.main.async {
self.seasonArray = response.sorted { $0.year < $1.year }
// Reloaded tableview in UIKit here
}
}
}
}
Комментарии:
1. Все это имеет смысл. Однако, где мне сначала вызвать
fetchSeasons()
?2. Нашел способ. Я вызываю `.onAppear { self. Выборка сезона() } в списке.
3. Да, это работает. Вы также можете вызывать
fetchSeasons()
внутри пользовательского инициализатора.