# #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] ИЛИ какой-либо формы, с которой легко работать/компактная карта?