List SwiftUI列表正在工作,但选择器不工作

List SwiftUI列表正在工作,但选择器不工作,list,swiftui,picker,List,Swiftui,Picker,我有这个看法。通过显示数据,列表可以正常工作。选择器不工作。它不显示任何数据。两者使用相同的对象和函数。我不知道选择器不显示数据的原因。我想用选择器。我列出这个列表只是为了确定问题,但我仍然不知道 import SwiftUI struct GameListPicker: View { @ObservedObject var gameListViewModel = GameListViewModel() @State private var selectedGameList = "

我有这个看法。通过显示数据,列表可以正常工作。选择器不工作。它不显示任何数据。两者使用相同的对象和函数。我不知道选择器不显示数据的原因。我想用选择器。我列出这个列表只是为了确定问题,但我仍然不知道

 import SwiftUI

struct GameListPicker: View {

@ObservedObject var gameListViewModel = GameListViewModel()
@State private var selectedGameList = ""

var body: some View {
    
    VStack{        
    
        List(gameListViewModel.gameList){gameList in
        HStack {
            Text(gameList.gameName)
            }
        }
        .onAppear() {self.gameListViewModel.fetchData()}
    
        Picker(selection: $selectedGameList, label: Text("")){
        ForEach(gameListViewModel.gameList) { gameList in
            Text(gameList.gameName)
            }
        }
        .onAppear() {self.gameListViewModel.fetchData()}}
     }
}
这是GameListViewModel

import Foundation
import Firebase

class GameListViewModel: ObservableObject{

@Published var gameList = [GameListModel]()
let db = Firestore.firestore()

func fetchData() {

    db.collection("GameData").addSnapshotListener {(querySnapshot, error) in
    guard let documents = querySnapshot?.documents else {
      print("No documents")
      return
    }

    self.gameList = documents.map { queryDocumentSnapshot -> GameListModel in
      let data = queryDocumentSnapshot.data()
      let gameName = data["GameName"] as? String ?? ""
      return GameListModel(id: gameName, gameName: gameName)
      }
    }
  }
}
这是GameListModel

import Foundation

struct GameListModel: Codable, Hashable,Identifiable {

var id: String
//var id: String = UUID().uuidString
var gameName: String

}

提前感谢您提供的任何帮助

选择器
不是设计为动态的,因此在数据更新时不会刷新,请尝试在数据更改时强制重新生成选择器,如下所示

    Picker(selection: $selectedGameList, label: Text("")){
    ForEach(gameListViewModel.gameList) { gameList in
        Text(gameList.gameName)
        }
    }.id(gameListViewModel.gameList)       // << here !!
Picker(选择:$selectedGameList,标签:Text(“”)){
ForEach(gameListViewModel.gameList){gameList中的gameList
文本(gameList.gameName)
}
}.id(gameListViewModel.gameList)//