Есть ли способ структурировать поля Firestore (одно и то же имя) с массивами и показать каждый элемент массива из каждого поля в TableView - PullRequest
0 голосов
/ 12 апреля 2019

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

это моя структура для массива.

struct Test{
    var car: Array<String>


    var dictionary: [String: Any] {
        return [
            "car":car
        ]
    }


}

extension Test{
    init?(dictionary: [String : Any]) {
            guard let car = dictionary["car"] as? Array<String>
            else { return nil }

        self.init(car:car)
    }
}

Это мой код для извлечения данных.

func loadData(){

        let db = Firestore.firestore()

        db.collection("test").getDocuments(){
            querySnapshot, error in
            if let error = error {
                print("\(error.localizedDescription)")
            }else{
                self.testArray = querySnapshot!.documents.compactMap({Test(dictionary: $0.data())})
                print(self.testArray)
                DispatchQueue.main.async {
                    self.tableView.reloadData()
                }
            }
        }

    }

А это мой код tableView.

override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return testArray.count
    }


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)

        let item = testArray[indexPath.row].car[indexPath.row]

        cell.textLabel!.text = ("\(item)")

        return cell

Все выглядит нормально, но при запуске приложения в табличном представлении отображается [0] из 1-го документа в первой строке, [1] из 2-го документа во второй строке и т. Д. Я хочу показать весь массив из первый документ, затем весь массив из второго документа и т. д.

1 Ответ

1 голос
/ 12 апреля 2019

Вам нужно несколько разделов

override func numberOfSections(in tableView: UITableView) -> Int {
   return testArray.count
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
   return testArray[section].car.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)   
    cell.textLabel!.text = testArray[indexPath.section].car[indexPath.row] 
    return cell
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...