首页 > 解决方案 > Swift - 使用 [String: [String: String]] 的字典填充 uitableview

问题描述

我是 Swift 的新手,我目前正在创建一个询问用户问题的日记应用程序。我像这样存储用户的输入:

dict = ["date": ["question1": "answer", "question2": "answer"]]

现在我需要在表格视图中将这些数据显示给用户,其中“日期”是标题,“问题 1”是描述。

我在网上查看过,但答案似乎引用了“indexPath.row”来将信息输入到单元格中,但由于这是一个字符串字典,我不能这样做。

感谢您的帮助!

标签: iosswiftuitableviewdictionary

解决方案


与其使用字典数组,不如考虑使用能更好地表示数据的对象。

struct Question: {
    let question: String
    let answer: String
}

struct DiaryDay {
    let date: Date // Note this is a Date object, not a String
    let questions: [Question]
}

那么你有

let diaryDays = DiaryDay(date: <date>, questions: 
    [Question(question: "question1": answer: "answer"),
     Question(question: "question2": answer: "answer")])

虽然有更多的代码,但你会发现更容易看到正在发生的事情。

看来你应该每天写一个部分……</p>

override func numberOfSections(in tableView: UITableView) -> Int {
    return diaryDays.count
}

然后每个问题一行…</p>

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    let diaryDay = diaryDays[section]
    return diaryDay.questions.count
}

然后配置你的单元格……</p>

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    // dequeue cell
    let diaryDay = diaryDays[indexPath.section]
    let question = diaryDay.questions[indexPath.row]    
    cell.question = question
    return cell
}

并在部分标题中显示日期...</p>

override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    let diaryDay = diaryDays[section]

    return // formatted diaryDay.date
}

推荐阅读