Код в вашем вопросе использует .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)
}
, для работы с данными вне замыкания.