gpt4 book ai didi

ios - Swift 4 使用 CodableFirebase 和自定义类处理来自 Firestore 的 nil 值

转载 作者:行者123 更新时间:2023-11-28 17:31:12 28 4
gpt4 key购买 nike

我正在使用库 CodableFirebase在使用 Google 的 Firestore 时解码和编码数据。它工作得很好,除非一个值没有在数据库中定义但是是类的一个属性。我想知道您如何定义该类,以便当快照从 Firebase 返回时它不会吐出 nil 值。

这是一个正在发生的事情的简单示例。这将是我的类定义。

class TimeThing: Codable {
var requestedTime: Double?
var createdTime: Double?

init(
requestedTime: Double? = 0,
createdTime: Double? = 0
) {
self.requestedTime = requestedTime
self.createdTime = createdTime
}}

这就是抛出的错误。在这种情况下,createdTime 在 Firestore 中有一个值,而“requestedTime”没有。

Thread 1: Fatal error: 'try!' expression unexpectedly raised an error: Swift.DecodingError.typeMismatch(Swift.Double, Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: "requestedTime", intValue: nil)], debugDescription: "Expected to decode Double but found a string/data instead.", underlyingError: nil))

我意识到我遗漏了一些基本的东西,但不幸的是我不确定那是什么。我需要对我的类(class)做些什么来设置默认值,以便在遇到来自 Firestore 的 nil 值时不会破坏我的 try block ?

谢谢!!

最佳答案

原来问题的核心是类中的默认值定义不正确。

class TimeThing: Codable {
var requestedTime: Double?
var createdTime: Double?

init(
requestedTime: Double? = 0,
createdTime: Double? = 0
) {
self.requestedTime = requestedTime
self.createdTime = createdTime
}}

应该是

class TimeThing: Codable {
var requestedTime: Double? = 0
var createdTime: Double? = 0

init(
requestedTime: Double,
createdTime: Double
) {
self.requestedTime = requestedTime
self.createdTime = createdTime
}}

修复该问题后,CodableFirebase 将使用默认值进行解码。

关于ios - Swift 4 使用 CodableFirebase 和自定义类处理来自 Firestore 的 nil 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52468948/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com