Компактное сопоставление [снимка данных] с некоторым [сообщением] эффективно

# #swift #firebase #firebase-realtime-database

Вопрос:

Мой Код:

 database.child("(groupChatId)_I/messages").observe(.value, with: { snapshot in
        
        
        guard let messagesArray = snapshot.children.allObjects as? [DataSnapshot] else {
            completion(.failure(DatabaseError.failedToFetch))
            return
        }

        var finalArray = [[String:Any]]()
        for messageIndex in messagesArray {
            finalArray.append(messageIndex.value as? [String : Any] ?? ["" : ""])
        }
        
        let messages: [Message] = finalArray.compactMap({ dictionary in
            guard let messageId = dictionary["message_id"] as? String,
                let message_content = dictionary["message_content"] as? String,
                let senderName = dictionary["sender_name"] as? String,
                let senderEmail = dictionary["sender_email"] as? String,
                let message_type = dictionary["message_type"] as? String
                else { return nil }
            
             ...

            return Message(sender: sender,
                           messageId: messageId,
                           sentDate: Date(),
                           message_content: message_content,
                           kind: finalKind)
        })
        completion(.success(messages))
    })
 

Существует ли более эффективный способ компактного отображения массива сообщений из [DataSnapshot] в [Сообщение] более эффективно и без этого уродливого цикла for?

Цель состоит в том, чтобы мне нужно извлечь массив из моей базы данных, а также упорядочить его с помощью childByAutoId(). Есть ли другой способ извлечения того же упорядоченного массива без его представления в виде [DataSnapshot] ИЛИ какой-либо формы, с которой легко работать/компактная карта?