Как обновить модель CollectionView с помощью Firebase? - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь инициализировать мою модель представления коллекции, которая содержит список [Users] с привязкой firebase, в которой хранятся данные.

Вот код модели представления коллекции:

typealias JSON = [String:Any]

    class HomeDataSource: Datasource {
        var users: [User]
        init?(with snapshot:DataSnapshot) {
            var users = [User]()
            guard let snapDict = snapshot.value as? [String: [String:Any]] else {return nil}

            for snap in snapDict {
                guard let user = User(dict: snap.value) else {continue}
                users.append(user)
            }

            self.users = users
        }
    }

Модель пользователя:

struct User {
    let name: String
    let username: String

    init?(dict: JSON) {
        guard let name = dict["name"] as? String,
                let email = dict["email"] as? String
        else {return nil}
        self.name = name
        self.username = email
    }
}

Snap Firebase Snap:

Snap (users) {
    8CVeHMNHI6hZAWj1zhGHEjPwYYz1 =     {
        email = "Silviu@isidors.sjsj";
        name = Bshdjdj;
    };
    9CuqgR4Es7TOPPJQEpSnQXlfYnm1 =     {
        email = "Test@silviu.com";
        name = "Test@silviu.com";
    };
    DBqGWlpdJKME570euqUz2rqI5Z83 =     {
        email = "Test@test.test";
        name = Test;
   };
} 

Функция извлечения:

func fetchUser() {
    let ref = Database.database().reference().child("users")
    ref.observe(.childAdded, with: { (snapshot) in
        let user = User(dict: snapshot.value as! JSON)
        self.users.append(user!)
        print(self.users)
        let new = HomeDataSource(with: snapshot)
        print(new)
        DispatchQueue.main.async(execute: {
            self.datasource = new
            self.collectionView?.reloadData()
        })
    }, withCancel: nil)
}

В данный момент я получаю массив пользователей из Firebase, однако представление моей коллекции не обновится.

У меня вопрос, как мне обновить мою модель представления коллекции и функцию выборки, чтобы она могла извлекать данные из Firebase и правильно заполнять представление коллекции?

1 Ответ

0 голосов
/ 22 марта 2019

Итак, проблема была в узле, на который я нацеливался.Удалена функция извлечения формы "child("users")" и нацелены на весь пользовательский узел с помощью uids.Затем я зацикливал snapshot.value во время его приведения в [String: [String: Any]], потому что каждый snapshot.value выглядел так (key: "vijwUkzAlbgcqjAammfy0JuVMB33", value: ["name": Silviu, "email": Office@isidors.com]) Наконец, я обновил класс HomeDataShource следующим образом:

class HomeDataSource: Datasource {

var users: [User]

init(with snapshot:DataSnapshot) {
    var users = [User]()

    let snapDict = snapshot.value as? [String:[String:Any]]

    for snap in snapDict! {
        guard let user = User(snap: snap.value) else {continue}
        users.append(user)
    }
    self.users = users
}
...