Чтение данных из Firebase в массивы - PullRequest
0 голосов
/ 08 февраля 2019

Чтение снимков из firebase довольно просто, хотя передача информации в массивы более сложна.У меня есть этот снимок

Snap (01-08-2019) {
    Sleep = "6.25 hrs";
    "Time Uploaded" = "07:10 AM";
}
Snap (01-09-2019) {
    Sleep = "6.72 hrs";
    "Time Uploaded" = "07:19 AM";
}
Snap (01-10-2019) {
    Sleep = "6.55 hrs";
    "Time Uploaded" = "07:10 AM";
}

Как мне создать один массив для даты, один для сна и один для загруженного времени.

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

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

Давайте начнем с класса, которыйхранит все данные

class ChronoClass {
    var node_id = ""
    var sleep = ""
    var time_uploaded = ""

    init(withSnapshot: DataSnapshot) {
        let nodeId = withSnapshot.key
        let someSleep = withSnapshot.childSnapshot(forPath: "sleep").value as? String ?? ""
        let someTime = withSnapshot.childSnapshot(forPath: "time_uploaded").value as? String ?? ""

        self.node_id = nodeId
        self.sleep = someSleep
        self.time_uploaded = someTime
    }
}

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

var sleepArray = [ChronoClass]()

и, наконец, код для чтения в каждом узле, заполняет класс и сохраняетклассы в массиве.

func readFirebaseDataAndPopulateArray() {
    let sleepNode = self.ref.child("sleep_node")
    sleepNode.observeSingleEvent(of: .value, with : { snapshot in

        for child in snapshot.children {
            let snap = child as! DataSnapshot
            let aChrono = ChronoClass(withSnapshot: snap)
            self.sleepArray.append(aChrono)
        }

        for x in self.sleepArray { //just prints out what's in the array
            print(x.node_id, x.sleep, x.time_uploaded)
        }
    })
 }

и выходные данные, основанные на вашей структуре

01-08-2019 6.25 hrs 07:10 AM
01-09-2019 6.72 hrs 07:19 AM
01-10-2019 6.55 hrs 07:10 AM

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

0 голосов
/ 09 февраля 2019

Я думаю, вы должны пересмотреть, как вы храните свои данные в базе данных.Чтобы посмотреть что-то похожее на это.

enter image description here

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

class Day {
    var date: String
    var sleep: String
    var timeUploaded: String

    init(date: String, sleep: String, timeUploaded: String) {
        self.date = date
        self.sleep = sleep
        self.timeUploaded = timeUploaded
    }
}

Тогда вы можете просто получить свои снимки следующим образом.

var days = [Day]()

private func fetchDays() {
    print(days.count)

    let ref = Database.database().reference().child("days")
    ref.observeSingleEvent(of: .value) { (snapshot) in
        guard let days = snapshot.value as? [String: Any] else { return }

        for (_,value) in days.enumerated() {
            guard let dayDict = value.value as? [String: String] else { return }
            let date = dayDict["date"] ?? ""
            let sleep = dayDict["sleep"] ?? ""
            let timeUploaded = dayDict["time_uploaded"] ?? ""

            //If you really want 3 different arrays just add them here
            // dateArray.append(date) and so on for the other two arrays
            let day = Day(date: date, sleep: sleep, timeUploaded: timeUploaded)
            self.days.append(day)
        }

        print(self.days.count)
    }
}
}

Надеюсь, это поможет.Не удалось прокомментировать вопрос о том, как структурированы ваши данные.

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