Является ли плохой практикой отмечать ценность, которая, как вы знаете, не изменится? - PullRequest
0 голосов
/ 08 мая 2020

У меня есть приложение iOS, которое использует Firebase на сервере. Я пытаюсь лучше понять функции Firebase observe и observeSingleEvent. Проще говоря, мне было интересно, должен ли я создать два отдельных закрытия (observe / observeSingleEvent) в зависимости от данных, которые должны быть соблюдены.

Например, у меня есть метка «LabelA», которая, скорее всего, изменится (количество лайков, количество подписчиков и т. Д. c), которую я бы поместил в функцию observe. У меня также есть метка «метка B», которая не изменится, но ее все равно нужно получить из Firebase.

Могу ли я поместить logi c для «метки B» в функцию observe, используемую для «метки A», или мне было бы лучше разместить «метку B» "в собственном закрытии observeSingleEvent?

РЕДАКТИРОВАТЬ:

Database.database().reference(withPath: "users").child(path_to_some_user).observe(.value) {
    ... //Observe Total Likes value & update UI when it changes
    ... //Is it bad practice to set up "Label B" here?
}

Database.database().reference(withPath: "users").child(path_to_some_user).observeSingleEvent(.value) {
    ... //Or should i setup "label B" here in its own closure
}

JSON структура выглядит следующим образом

  • Пользователи
    • Некоторые пользователи
      • Общее количество лайков <- ожидается / вероятно изменится в реальном времени (т.е. значение, которое будет использоваться для «метки A») </li>
      • Имя пользователя <- вряд ли изменится , не заботьтесь об обновлении данными в реальном времени (т. е. значение, которое будет использоваться для "метки B") </li>

1 Ответ

1 голос
/ 09 мая 2020

.observe и .observeSingleEvent предназначены для двух разных целей.

.observe is used when you want to be notified of changed data.

.observeSingleEvent gets data **once** and you're not notified about future changes

Пример.

Предположим, приложение чата имеет два типа пользователей; пользователь и администратор. В этом примере типы пользователей не меняются.

Когда пользователь входит в систему, приложение считывает этот узел пользователей, чтобы определить их тип пользователя:

/users/uid_x

, и структура узла будет такой

uid_x
  user_name: "Henry"
  user_type: "Admin"
  fav_food: "Pizza"

. НаблюдениеSingleEvent здесь полезно, так как данные нужно читать один раз, а не снова.

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

Имейте в виду, что добавление .observe к узлу приведет к однократному считыванию всех дочерних узлов, а затем оставит наблюдателя для уведомления приложения о будущих изменениях. Вы можете получить более подробную информацию, используя .childAdded, .childChanged и .childRemoved вместо .value.

...