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



在使用Google的Firestore时,我正在使用CodableFirebase库来解码和编码数据。它工作得很好,除非值未在数据库中定义,而是类的属性。我想知道您如何定义该类,以便当快照从 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 中有一个值,而 'requestTime' 没有。

线程 1:致命错误:"try!"表达式意外引发错误:Swift.DecodingError.typeMismatch(Swift.Double, Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: "requestTime", intValue: nil(], debugDescription: "预期解码 Double 但找到一个字符串/数据。

我意识到我错过了一些基本的东西,但不幸的是,我只是不确定那是什么。我需要对我的类执行哪些操作才能设置默认值,以便在遇到来自 Firestore 的 nil 值时不会破坏我的 try 块?

谢谢!!

事实证明,问题的核心是类中的默认值定义不正确。

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解码。

相关内容

  • 没有找到相关文章

最新更新