我对Xcode 14有一个有趣的问题。3,firebase 9.6.0.
我的代码是从firebase获取文档,我想将收到的文档Map到一个自定义结构“游戏”
struct Game: Identifiable, Codable {
@DocumentID var id: String? // -> UUID of firestore document
var nr: Int?
var status: String?
var league: String
var homeTeam: String
var homeTeamLogoUrl: String?
var guestTeam: String
var guestTeamLogoUrl: String?
var runs: Runs?
var scheduledDate: Date
var startTime: Date?
var endTime: Date?
var ballpark: String
var city: String
var scorerID: String?
var score: Count?
var bases: BaseStatus?
var inning: Int?
var inningHalf: String?
var inningResults: [InningResult]?
}
func getLiveGames(country: String, league: String, season: Int) async {
// declare temporary list of live games
var liveGames = [Game]()
let leagueRef = db.collection("liveGames")
let snapshot = try? await leagueRef.getDocuments()
if snapshot != nil {
for docs in snapshot!.documents {
do {
let result = try docs.data(as: Game.self)
print(result)
} catch {
print(error)
}
}
} else {
self.errorMessage = "No documents in 'liveGames' collection"
print(self.errorMessage)
}
}
甚至我也遵循了Firebase帮助中的描述:https://firebase.google.com/docs/firestore/solutions/swift-codable-data-mapping?hl=en
Xcode显示以下错误消息:传递给call的参数不带参数。
enter image description here
即使Xcode显示这个错误消息,它也会编译并运行我的代码。
有人经历过同样的行为吗?
其中非常有趣的部分是,使用一点不同的代码,Xcode不会编译,也不会运行代码。但这才是我真正想要的编码方式。..
func getLiveGames(country: String, league: String, season: Int) async {
// declare temporary list of scheduled games
var liveGames = [Game]()
let leagueRef = db.collection("liveGames")
let queryLiveGames = try? await leagueRef.getDocuments()
if queryLiveGames != nil {
liveGames = (queryLiveGames!.documents.compactMap({ (queryDocumentSnapshot) -> Game? in
let result = Result { try? queryDocumentSnapshot.data(as: Game.self) }
switch result {
case .success(let game):
if var game = game {
// A game value was successfully initialized from the DocumentSnapshot
self?.errorMessage = nil
liveGames.append(game)
return game
}
else {
// A nil value was initialized from the DocumentSnapshot,
// or the DocumentSnapshot was nil
self.errorMessage = "Game document doesn't exist."
return nil
}
case .failure(let error):
// A liveGame value could not be initialized from the DocumentSnapshot
switch error {
case DecodingError.typeMismatch(_, let context):
self.errorMessage = "\(error.localizedDescription): \(context.debugDescription)"
case DecodingError.valueNotFound(_, let context):
self.errorMessage = "\(error.localizedDescription): \(context.debugDescription)"
case DecodingError.keyNotFound(_, let context):
self.errorMessage = "\(error.localizedDescription): \(context.debugDescription)"
case DecodingError.dataCorrupted(let key):
self.errorMessage = "\(error.localizedDescription): \(key)"
default:
self.errorMessage = "Error decoding document: \(error.localizedDescription)"
}
return nil
}
}))
} else {
self.errorMessage = "No documents in 'liveGames' collection"
print(self.errorMessage)
}
}
Xcode-截图:
1条答案
按热度按时间3pvhb19x1#
添加FirebaseFirestoreSwift作为Xcode目标和
import FirebaseFirestoreSwift
的依赖项。