Одно свойство внезапно становится нулевым после вызова блока завершения метода firebase

Проблема: я вызываю объект Message из базы данных Firebase, и он правильно возвращает все мои свойства. Однако после блока завершения одно из значений возвращает nil, которое является свойством fromId.

Приведенный ниже код для развернутого условного свойства fromId выводит "Нет данных", в то время как все остальные мои свойства печатаются правильно и показывают наличие данных.

FirebaseSystem.system.getMessage(messageID, completion: { (messageObject) in

print(messageObject.text)
print(messageObject.timestamp)
print(messageObject.imageUrl)

if let fromID = messageObject.fromId {
    print(fromID)
} else {
    print("No Data")
}

Однако перед блоком завершения все значения правильно выводятся ниже из каждого цикла:

(ключ: "toAddictionID", значение: -KyV4lz1xNeoN1IhdMe)

(ключ: "fromID", значение: RvLlALPx9TUdSfBYp0CZ6z6mQpl)

(ключ: "метка времени", значение: 1510549542.52683)

(ключ: "imageUrl", значение: https://firebasestorage.googleapis.com/

/** Gets the Message object for the specified message id */
func getMessage(_ messageID: String, completion: @escaping (Message) -> Void) {
    MESSAGE_REF.child(messageID).observeSingleEvent(of: .value, with: { (snapshot) in

        guard let dictionary = snapshot.value as? [String: Any] else {
            print("Firebase getMessage : Could not find message object")
            return
        }

        for values in dictionary {
            print(values)
        }


        completion(Message(dictionary: dictionary))
    })
}

Модель класса ниже:

class Message: NSObject {

var fromId: String?
var text: String?
var timestamp: NSNumber?
var toAddictionID: String?
var imageUrl: String?

init(dictionary: [String: Any]) {

    if let fromId = dictionary["fromId"] as? String {
        self.fromId = fromId
    }

    if let text = dictionary["text"] as? String {
        self.text = text
    }

    if let toAddictionID = dictionary["toAddictionID"] as? String {
        self.toAddictionID = toAddictionID
    }

    if let timestamp = dictionary["timestamp"] as? NSNumber {
        self.timestamp = timestamp
    }

    if let imageUrl = dictionary["imageUrl"] as? String {
        self.imageUrl = imageUrl
    }

Я не уверен, в чем проблема, и любое понимание поможет!

1 ответ

Неважно, это была просто опечатка!

Предполагалось, что это fromID вместо fromId. Я не против, если этот пост будет удален, потому что я чувствую смущение.

Другие вопросы по тегам