tableView 数据源的字典

dictionary for tableView datasource

我正在尝试为 tableView 数据源使用字典,我正在从数据库中获取一个对象,其中包含一个键和一个值数组,因此 [String: [String]]

    var requestedList = [String]()
    var keyArr = [String]()
    var requestedDictionary = [String: [String]]()

    let tQuery = PFQuery(className: "MyClass")
        tQuery.whereKey("username", equalTo: PFUser.current()?.username as Any)
        tQuery.selectKeys(["descContent", "header"])
        do {
            let returnedObjects = try tQuery.findObjects()
            for object in returnedObjects {
                let header = object["header"] as! String
                keyArr.append(header)
                if let arr = object["descContent"] as! [String]? {
                    requestedDictionary[header] = arr
                    requestedList += arr
                }
            }
        } catch {
        }

我似乎无法将值与 tableView 的行正确对应,但是有人建议我使用数组来存储值,这就是我对 keyArr 所做的。我的问题是如何在数据源方法中访问键的内容和相应的值?这是我到目前为止所拥有的,但我无法 link 相应的键和值

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

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

        cell.descLbl.text = "Your ticket has been requested by \(requestedList[indexPath.row])"
        cell.refLbl.text = "for: \(keyArr[indexPath.row])"

        cell.leftBtn.tag = (indexPath.section * 100) + indexPath.row
        cell.leftBtn.addTarget(self, action: #selector(leftClick(sender:)), for: .touchUpInside)
        cell.rightBtn.tag = (indexPath.section * 100) + indexPath.row
        cell.rightBtn.addTarget(self, action: #selector(rightClick(sender:)), for: .touchUpInside)

        return cell
    }

您可以通过这种方式将 字典 转换为 tableView 可表示数据

let requestedDictionary:[String: [String]] = [
    "Key-1":["Value-1","Value-2","Value-3","Value-4"],
    "Key-A":["Value-X","Value-Y","Value-Z"],
    "Key-a":["Value-x","Value-y"],
]
lazy var data:[(key:String,values:[String])] = requestedDictionary.compactMap({(key:[=10=],values:)})

func numberOfSections(in tableView: UITableView) -> Int {
    data.count
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return data[section].values.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = UITableViewCell()
    cell.textLabel?.text = data[indexPath.section].values[indexPath.row]
    return cell
}

func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    return data[section].key
}

希望对您有所帮助。