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に「requestedTime」がない値を持っています。
スレッド1:致命的なエラー:「試してみてください!」式で予期せずエラーが発生しました:Swift.DecodingError.typeMismatch(Swift.Double、Swift.DecodingError.Context(codingPath:[CodingKeys(stringValue: "requestedTime"、intValue:nil)]、debugDescription: "Doubleをデコードする予定ですが、文字列が見つかりました代わりに/data。"、underlyingError:nil))
基本的なものが欠けていることに気づきましたが、残念ながらそれが何であるかわかりません。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がデコードするためのデフォルトがありました。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加