Как использовать flatmap для хранения данных снимка в переменную - PullRequest
0 голосов
/ 08 января 2019

Используя отладчик, он показывает, что у снимка есть 3 значения, а у записей - 0, поэтому я думаю, что я неправильно использую flatMap. Возможно, есть лучший способ хранить данные в сообщениях.

static func observePosts(for user: User = User.current, withCompletion completion: @escaping (DatabaseReference, [Post]) -> Void) -> DatabaseHandle {
    let ref = Database.database().reference().child("posts").child(user.username)

    return ref.observe(.value, with: { (snapshot) in
        guard let snapshot = snapshot.children.allObjects as? [DataSnapshot] else {
            return completion(ref, [])
    }
        let posts = snapshot.flatMap(Post.init)
        completion(ref, posts)
    })
}

1 Ответ

0 голосов
/ 08 января 2019

Я думаю, что снимок - это всего лишь картинка из доступных на тот момент данных. Вы не можете напрямую сопоставить объекты снимка с типом публикации. Пожалуйста, сделайте следующее

let posts = snapshot.flatMap({(post) -> Post in

                let value = post.value as? Dictionary<String, String>

                let id = value?["id"] ?? ""
                let author = value?["author"] ?? ""
                let title = value?["title"] ?? ""
                let body = value?["body"] ?? ""

                return Post(id: id, author: author, title: title, body: body)
            })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...