Nano Hash - криптовалюты, майнинг, программирование

Быстрое получение данных Firebase

Следующие данные в базе данных Firebase:

{
  "schedule": {
      "Week 1": {
        "active": "true"
      },
      "Week 2": {
        "active": "true"
      },
      "Week 3": {
        "active": "false"
      },
      "Week 4": {
        "active": "true"
      },  
      ...
   }
}

Я хочу получить все недели, где активен только истина. Я устанавливаю ссылку Firebase как таковую:

ref = FIRDatabase.database().reference(withPath: "Schedule")

а затем выполните следующие действия:

ref.observeSingleEvent(of: .value, with: { snapshot in
        //
        print("Count: ", snapshot.childrenCount)

        for _ in snapshot.children {
                print("\(snapshot.value)")
        }

    })

Что производит следующий вывод:

Optional({
      "Week 1" =     {
           active = 1;
       };
       "Week 2" =     {
           active = 1;
       };
       "Week 3" =     {
           active = 0;
       };
       "Week 4" =     {
           active = 1;
       };
       ...
}

Может кто-нибудь предложить, как я могу получить только те недели, когда для параметра active установлено значение true, которое необходимо загрузить в массив строки типа:

var weeksActive = [String]()

  • Это описано в руководстве по началу работы с Firebase Работа со списками. в разделе «Фильтрация данных». Однако старая документация Firebase НАМНОГО лучше, чем текущая, поэтому ознакомьтесь с Получение Данные в разделе Запрос данных. Они устарели, но объяснение и примеры помогут. 04.01.2017

Ответы:


1

Для этого вы можете использовать queryOrdered(byChild:) и queryEqual(toValue:) вот так.

let ref = FIRDatabase.database().reference(withPath: "Schedule").queryOrdered(byChild: "active").queryEqual(toValue : true)

ref.observe(.value, with:{ (snapshot) in

    print("Count: ", snapshot.childrenCount)
    for child in snapshot.children {
        print("\((child as! FIRDataSnapshot).value)")
        //To get week you need to access key
        print("\((child as! FIRDataSnapshot).key)")
    }
})
04.01.2017
  • Вывод выглядит следующим образом: Количество: 4 Необязательный ({активный = 1; }) Необязательный ({активный = 1; }) Необязательный ({активный = 0; }) Необязательный ({активный = 1; }) 05.01.2017
  • Вывод выглядит следующим образом: Количество: 4 Необязательный ({активный = 1; }) Необязательный ({активный = 1; }) Необязательный ({активный = 0; }) Необязательный ({активный = 1; }) Я хочу получить список как таковой: неделя 1, неделя 2, неделя 4, так как это те, у которых для параметра active установлено значение true, а не для параметра active = 1 05.01.2017
  • @iosforme Проверьте отредактированный ответ, и вы можете получить неделю с помощью ключа. Если вы все еще сталкиваетесь с проблемой, вам нужно показать, как вы добавляете этого ребенка в Schedule. 05.01.2017
  • @iosforme Добро пожаловать, приятель :) 05.01.2017

  • 2

    Вот код

    1) Создайте новую страницу Swift в имени как Schedule.swift

    2) Внутри Schedule.swift страницы используйте приведенный ниже код

    import UIKit
    class Schedule: NSObject
    {
       var weeks: String?
       var active: String?
    }
    

    3) На ViewController.Swift странице или на другой странице используйте этот код

    import UIKit
    import Firebase
    import FirebaseDatabase
    class ViewController: UIViewController
    {
        var ShceduleList = [Schedule]()
        var ref = FIRDatabaseReference!
        var refHandle: Uint!
        override func viewDidLoad()
        {
           super.viewDidLoad()
           ref = FIRDatabase.database().reference()
           self.FetchSchedule()
        }
    
        fun FetchSchedule()
        {
           refHandle = ref.child("schedule").observeEventType(.ChildAdded, withBlock: {(snapshot) in
              if let dictionary = snapshot.value as? [String: AnyObject]
              {
                   let Schedule = Schedule()
                   Schedule.setValuesForKeyWithDictionary(dictionary)
                   self.ScheduleList.append(Schedule)
                   dispatch_async(dispatch_get_main_queue(),{
                    print("Schedule List: \(self.ScheduleList)")
                   })
              } 
           })
        }
    }
    

    Здесь я добавил код для добавления данных в массив, вам просто нужно проверить значения в соответствии с вашими потребностями перед добавлением в массив ScheduleList.

    04.01.2017
  • Это не ответ на вопрос, OP хочет, чтобы неделя с активным была правдой, и то, что вы сделали, это просто наблюдать за ChildAdded. 04.01.2017

  • 3

    Это код для проблемы, упомянутой выше. Сначала возьмите значение элемента как FIRDatabaseSnapshot.value!. Затем добавьте его в weekActive.

        ref.observeSingleEvent(of: .value, with: { snapshot in
                //
                print("Count: ", snapshot.childrenCount)
    
                for item in snapshot.children {
                        print("\(item as! FIRDataSnapshot).value)")
                       let week = item as! FIRDataSnapshot).value!
    
                }
    
            })
    
    04.01.2017
  • Неа. Неверно и не отвечает на вопрос ОП. 04.01.2017
  • Что такое правильный адрес, пожалуйста, объясните. Это поможет другим. 04.01.2017
  • Вопрос спрашивает Я хочу получить все недели, где активен только true. Этот ответ извлекает все узлы в ref, а затем перебирает их. Он не возвращает только те, для которых значение active равно true. 04.01.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..