有没有办法用数组构造一个 Firestore 字段(同名)并显示 TableView 中每个字段的每个数组元素

Posted

技术标签:

【中文标题】有没有办法用数组构造一个 Firestore 字段(同名)并显示 TableView 中每个字段的每个数组元素【英文标题】:Is there a way to struct a Firestore fields(same name) with arrays and show each array element from each field in TableView 【发布时间】:2019-04-12 17:02:23 【问题描述】:

我正在开发一个 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】:

你需要多个部分

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
 

【讨论】:

以上是关于有没有办法用数组构造一个 Firestore 字段(同名)并显示 TableView 中每个字段的每个数组元素的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法使用Firestore安全规则使用FieldValue.increment()更新文档字段?

有没有办法获取存储在 firestore 中的数组中对象的索引?

有没有办法在查询firestore数据时设置范围?

Cloud Firestore 更改字段名称

如何将值添加到从颤振到 Firestore 的数组中

Firebase Firestore更新时间字段安全问题