Swift 4 обрабатывает нулевые значения из Firestore с CodableFirebase и пользовательскими классами - PullRequest
0 голосов
/ 23 сентября 2018

Я использую библиотеку 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
}}

И это будет ошибкой, которая выдается.В этом случае созданное время имеет значение в Firestore, а значение «запрашиваемого времени» - нет.

Тема 1: Неустранимая ошибка: 'try!'В выражении неожиданно возникла ошибка: Swift.DecodingError.typeMismatch (Swift.Double, Swift.DecodingError.Context (codingPath: [CodingKeys (stringValue: «requiredTime», intValue: nil)], debugDescription: «Ожидается декодировать Double, но найдена строка/ data вместо. ", underError: nil))

Я понимаю, что упускаю что-то фундаментальное, но, к сожалению, я просто не уверен, что это такое.Что мне нужно сделать с моим классом, чтобы установить значения по умолчанию, которые не взорвут мой блок try при получении значения nil из Firestore?

Спасибо!

1 Ответ

0 голосов
/ 25 сентября 2018

Оказывается, суть проблемы заключалась в том, что значения по умолчанию в классе были определены неправильно.

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 для декодирования.

...