SwiftUI List 正在工作但不是选择器
SwiftUI List is working but not the picker
我有这个看法。该列表通过显示数据正常工作。选择器不工作。它不显示任何数据。两者都使用相同的对象和函数。我不知道选择器不显示数据的原因。我想使用选择器。我放置列表只是为了尝试确定问题,但我仍然不知道。
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)
}
}
}
}
这是游戏列表模型
import Foundation
struct GameListModel: Codable, Hashable,Identifiable {
var id: String
//var id: String = UUID().uuidString
var gameName: String
}
在此先感谢您的帮助
Picker
没有设计成动态的,所以数据更新的时候不刷新,尝试在数据改变的时候强制重建picker,如下
Picker(selection: $selectedGameList, label: Text("")){
ForEach(gameListViewModel.gameList) { gameList in
Text(gameList.gameName)
}
}.id(gameListViewModel.gameList) // << here !!
我有这个看法。该列表通过显示数据正常工作。选择器不工作。它不显示任何数据。两者都使用相同的对象和函数。我不知道选择器不显示数据的原因。我想使用选择器。我放置列表只是为了尝试确定问题,但我仍然不知道。
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)
}
}
}
}
这是游戏列表模型
import Foundation
struct GameListModel: Codable, Hashable,Identifiable {
var id: String
//var id: String = UUID().uuidString
var gameName: String
}
在此先感谢您的帮助
Picker
没有设计成动态的,所以数据更新的时候不刷新,尝试在数据改变的时候强制重建picker,如下
Picker(selection: $selectedGameList, label: Text("")){
ForEach(gameListViewModel.gameList) { gameList in
Text(gameList.gameName)
}
}.id(gameListViewModel.gameList) // << here !!