Что делает код снимка / наблюдателя в firebase? - PullRequest
0 голосов
/ 10 февраля 2020

При извлечении данных из Firebase мы обычно используем приведенный ниже код (или его повторение)

...observeSingleEvent(of: .value, with: { snapshot in

var tempPosts = [PostModel]()

for child in snapshot.chidren{
}

return tempPosts

})

, но я не совсем понимаю, что делает этот код? Может кто-нибудь объяснить это на высоком уровне? Я пытался распечатать данные на нескольких местах, но единственные данные, которые я получаю, это: Снимок или [App.PostModel]

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

Код в вашем вопросе использует .observeSingleEvent. Это означает, что он запрашивает данные у Firebase немедленно один раз и не будет наблюдать никаких будущих изменений или запускать какие-либо другие события.

Данные возвращаются в замыкании как «снимок» и представляют собой «изображение» 'как выглядят эти данные в определенный момент времени. (снимок ... картинка? Довольно мгновенно, да)

Данные Firebase действительны только в закрытии ; любой код, следующий за замыканием, будет выполнен до того, как Firebase успеет извлечь данные с сервера, поэтому убедитесь, что вы работаете с данными Firebase внутри этого замыкания.

Значение для l oop перебирает дочерние узлы в снимке по одному. Например, снимок может содержать дочерние снимки каждого пользователя в узле / users. Затем вы можете получить данные пользователей из каждого дочернего снимка.

Оператор return никогда не должен использоваться в асинхронном закрытии, поскольку вы не можете возвращать данные (таким образом) из замыкания, поэтому эту строку следует удалить. Однако вы можете использовать обработчик завершения, такой как

func getUser(with userID: String, completion: @escaping ((_ user: UserClass) -> Void)) {

  //get the user info from the snapshot, create a user object and pass it back
  //   via the completion
  completion(user)
}

, для работы с данными вне замыкания.

1 голос
/ 10 февраля 2020

Этот код используется для наблюдения за изменением данных в вашей базе данных. Вам не нужно время от времени отправлять запросы для получения последних данных.

Когда данные изменяются, это вызывает закрытие, которое вы дали, чтобы вы могли что-то делать. Для большей справки вы можете прочитать this do c.

Вы можете попробовать это, чтобы преобразовать снимок в словарь:

for child in snapshot.children {
    let dataS = child as! DataSnapshot
    let dict = dataS.value as? [String : AnyObject]
    // handle the data
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...