![](/img/trans.png)
[英]Initializer 'init(_:)' requires that '' conform to 'StringProtocol' SwiftUI Picker with Firebase
[英]swiftUI picker “Generic struct 'Picker' requires that 'String' conform to 'View'”
我按照这个链接的公认答案
如何在 SwiftUI 中使用带有 ObservedObject 的 Picker?
但我在结构 GameListPicker 中收到消息“通用结构‘选择器’要求‘字符串’符合‘视图’”
import SwiftUI
struct GameListPicker: View {
@ObservedObject var gameListViewModel = GameListViewModel()
@State private var selectedGameList = ""
var body: some View {
Picker(selection: $selectedGameList, label: ""){
ForEach(gameListViewModel.gameList) { gameList in
Text(gameList.gameName)
}
}
.onAppear() {
self.gameListViewModel.fetchData()
}
}
}
游戏列表视图模型
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
中的参数label:
提供一个符合View
协议的参数。
代替:
Picker(selection: $selectedGameList, label: "") {
和:
Picker(selection: $selectedGameList, label: Text("")) {
如果您只需要一个文本,您可以使用:
Picker("Some text", selection: $selectedGameList) { ...
如果您不想为您的选择器使用任何标签(当您尝试使用""
时),您可以使用EmptyView
:
Picker(selection: $selectedGameList, label: EmptyView()) { ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.