Я пытаюсь заполнить средство выбора асинхронно полученными данными из внешнего API.
Это моя модель:
struct AppModel: Identifiable {
var id = UUID()
var appId: String
var appBundleId : String
var appName: String
var appSKU: String
}
Класс, который извлекает данные и публикует sh:
class AppViewModel: ObservableObject {
private var appStoreProvider: AppProvider? = AppProvider()
@Published private(set) var listOfApps: [AppModel] = []
@Published private(set) var loading = false
fileprivate func fetchAppList() {
self.loading = true
appStoreProvider?.dataProviderAppList { [weak self] (appList: [AppModel]) in
guard let self = self else {return}
DispatchQueue.main.async() {
self.listOfApps = appList
self.loading = false
}
}
}
init() {
fetchAppList()
}
}
Представление:
struct AppView: View {
@ObservedObject var appViewModel: AppViewModel = AppViewModel()
@State private var selectedApp = 0
var body: some View {
ActivityIndicatorView(isShowing: self.appViewModel.loading) {
VStack{
// The Picker doesn't bind with appViewModel
Picker(selection: self.$selectedApp, label: Text("")) {
ForEach(self.appViewModel.listOfApps){ app in
Text(app.appName).tag(app.appName)
}
}
// The List correctly binds with appViewModel
List {
ForEach(self.appViewModel.listOfApps){ app in
Text(app.appName.capitalized)
}
}
}
}
}
}
Хотя представление списка связывается с наблюдаемым объектом appViewModel, средство выбора не ведет себя так же. Я не могу понять почему. Любая помощь ?