Swift Firebase не может хранить значения в словаре - PullRequest
1 голос
/ 13 июля 2020

Я в тупике.

У меня есть модель данных для некоторых значений рейтинга, которые я хочу получить и затем использовать для некоторых расчетов. Значения сохраняются в виде строк, даже если они представляют собой числа от -9 до 9. Приведение здесь не проблема.

import FirebaseDatabase.FIRDataSnapshot

class AHPPriority {
    
    var key: String?
    
    let creationDate: Date
    let ajkpXc: String
    let ajkpXijr: String
    let ajkpXqpa: String
    let ajkpXcoj: String
    let ajkpXlos: String
    let ajkpXiracc: String
    let ajkpXdph: String
    let cXijr: String
    let cXqpa: String
    let cXcoj: String
    let cXlos: String
    let cXiracc: String
    let cXdph: String
    let ijrXqpa: String
    let ijrXcoj: String
    let ijrXlos: String
    let ijrXiracc: String
    let ijrXdph: String
    let qpaXcoj: String
    let qpaXlos: String
    let qpaXiracc: String
    let qpaXdph: String
    let cojXlos: String
    let cojXiracc: String
    let cojXdph: String
    let losXiracc: String
    let losXdph: String
    let iraccXdph: String

    
    init(ajkpXc: String, ajkpXijr: String, ajkpXqpa: String, ajkpXcoj: String, ajkpXlos: String, ajkpXiracc: String, ajkpXdph: String, cXijr: String, cXqpa: String, cXcoj: String, cXlos: String, cXiracc: String, cXdph: String, ijrXqpa: String, ijrXcoj: String, ijrXlos: String, ijrXiracc: String, ijrXdph: String, qpaXcoj: String,  qpaXlos: String,   qpaXiracc: String,  qpaXdph: String, cojXlos: String, cojXiracc: String, cojXdph: String, losXiracc: String, losXdph: String, iraccXdph: String) {
        
                self.creationDate = Date()
                self.ajkpXc = ajkpXc
                self.ajkpXijr = ajkpXijr
                self.ajkpXqpa = ajkpXqpa
                self.ajkpXcoj = ajkpXcoj
                self.ajkpXlos = ajkpXlos
                self.ajkpXiracc = ajkpXiracc
                self.ajkpXdph = ajkpXdph
                self.cXijr = cXijr
                self.cXqpa = cXqpa
                self.cXcoj = cXcoj
                self.cXlos = cXlos
                self.cXiracc = cXiracc
                self.cXdph = cXdph
                self.ijrXqpa = ijrXqpa
                self.ijrXcoj = ijrXcoj
                self.ijrXlos = ijrXlos
                self.ijrXiracc = ijrXiracc
                self.ijrXdph =  ijrXdph
                self.qpaXcoj = qpaXcoj
                self.qpaXlos = qpaXlos
                self.qpaXiracc = qpaXiracc
                self.qpaXdph = qpaXdph
                self.cojXlos = cojXlos
                self.cojXiracc = cojXiracc
                self.cojXdph = cojXdph
                self.losXiracc = losXiracc
                self.losXdph = losXdph
                self.iraccXdph = iraccXdph
        
        
    }

    var dictValue: [String: Any] {
   let createdAgo = creationDate.timeIntervalSince1970
    
        return ["created_at" : createdAgo,
        "ajkpXc": ajkpXc,
        "ajkpXijr ": ajkpXijr,
        "ajkpXqpa": ajkpXqpa,
        "ajkpXcoj": ajkpXcoj,
        "ajkpXlos ": ajkpXlos,
        "ajkpXiracc ": ajkpXiracc,
        "ajkpXdph": ajkpXdph,
        "cXijr": cXijr,
        "cXqpa": cXqpa,
        "cXcoj": cXcoj,
        "cXlos": cXlos,
        "cXiracc": cXiracc,
        "cXdph": cXdph,
        "ijrXqpa": ijrXqpa,
        "ijrXcoj": ijrXcoj,
        "ijrXlos": ijrXlos,
        "ijrXiracc": ijrXiracc,
        "ijrXdph": ijrXdph,
        "qpaXcoj": qpaXcoj,
        "qpaXlos": qpaXlos,
        "qpaXiracc": qpaXiracc,
        "qpaXdph": qpaXdph,
        "cojXlos": cojXlos,
        "cojXiracc": cojXiracc,
        "cojXdph": cojXdph,
        "losXiracc": losXiracc,
        "losXdph": losXdph,
        "iraccXdph": iraccXdph ]
     
}
    
    init?(snapshot: DataSnapshot) {
    guard let dict = snapshot.value as? [String: Any],
    
    let createdAgo = dict["created_at"] as? TimeInterval,
    let ajkpXc = dict["ajkpXc"] as? String,
    let ajkpXijr = dict["ajkpXijr"] as? String,
    let ajkpXqpa = dict["ajkpXqpa"] as? String,
    let ajkpXcoj = dict["ajkpXcoj"] as? String,
    let ajkpXlos = dict["ajkpXlos"] as? String,
    let ajkpXiracc = dict["ajkpXiracc"] as? String,
    let ajkpXdph = dict["ajkpXdph"] as? String,
    let cXijr = dict["cXijr"] as? String,
    let cXqpa = dict["cXqpa"] as? String,
    let cXcoj = dict["cXcoj"] as? String,
    let cXlos = dict["cXlos"] as? String,
    let cXiracc = dict["cXiracc"] as? String,
    let cXdph = dict["cXdph"] as? String,
    let ijrXqpa = dict["ijrXqpa"] as? String,
    let ijrXcoj = dict["ijrXcoj"] as? String,
    let ijrXlos = dict["ijrXlos"] as? String,
    let ijrXiracc = dict["ijrXiracc"] as? String,
    let ijrXdph = dict["ijrXdph"] as? String,
    let qpaXcoj = dict["qpaXcoj"] as? String,
    let qpaXlos = dict["qpaXlos"] as? String,
    let qpaXiracc = dict["qpaXiracc"] as? String,
    let qpaXdph = dict["qpaXdph"] as? String,
    let cojXlos = dict["cojXlos"] as? String,
    let cojXiracc = dict["cojXiracc"] as? String,
    let cojXdph = dict["cojXdph"] as? String,
    let losXiracc = dict["losXiracc"] as? String,
    let losXdph = dict["losXdph"] as? String,
    let iraccXdph = dict["iraccXdph"] as? String

     else {return nil}
        
        
        self.key = snapshot.key
        self.creationDate = Date(timeIntervalSince1970: createdAgo)
        self.ajkpXc = ajkpXc
        self.ajkpXijr = ajkpXijr
        self.ajkpXqpa = ajkpXqpa
        self.ajkpXcoj = ajkpXcoj
        self.ajkpXlos = ajkpXlos
        self.ajkpXiracc = ajkpXiracc
        self.ajkpXdph = ajkpXdph
        self.cXijr = cXijr
        self.cXqpa = cXqpa
        self.cXcoj = cXcoj
        self.cXlos = cXlos
        self.cXiracc = cXiracc
        self.cXdph =  cXdph
        self.ijrXqpa = ijrXqpa
        self.ijrXcoj = ijrXcoj
        self.ijrXlos = ijrXlos
        self.ijrXiracc =  ijrXiracc
        self.ijrXdph =  ijrXdph
        self.qpaXcoj = qpaXcoj
        self.qpaXlos = qpaXlos
        self.qpaXiracc =   qpaXiracc
        self.qpaXdph = qpaXdph
        self.cojXlos = cojXlos
        self.cojXiracc = cojXiracc
        self.cojXdph = cojXdph
        self.losXiracc =   losXiracc
        self.losXdph = losXdph
        self.iraccXdph = iraccXdph
        }

}

Я действительно могу получить данные правильно, используя следующую службу:

Странно то, что снимок содержит все значения. Но ahpPr ios пуст. И я не знаю почему.

Кто-нибудь может мне помочь? :)

1 Ответ

1 голос
/ 13 июля 2020

Вы используете неудачный инициализатор (init?) для AHPPriority в сочетании с compactMap, который вернет пустой массив, если все инициализаторы завершились неудачно. Чтобы исправить это, вам придется полностью изменить метод init?(snapshot: DataSnapshot). Проверьте каждое значение, для которого возвращается nil, и вместо неудачной инициализации, возможно, укажите значение по умолчанию или сделайте только это свойство необязательным. Например, если created_at возвращается как nil, а init полностью не работает из-за этого, сделайте creationDate необязательным let creationDate: Date?. Удалите guard let, охватывающий все, и сделайте отказоустойчивый guard let в соответствии с вашими требованиями.

Лучшим подходом было бы использовать Codable.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...