Swift - 用 [String: [String: String]] 的字典填充 uitableview

Ant*_*ony 3 dictionary uitableview ios swift

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

dict = ["date": ["question1": "answer", "question2": "answer"]]
Run Code Online (Sandbox Code Playgroud)

现在我需要在 tableview 中向用户显示这些数据,其中“date”是标题,“question1”是描述。

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

感谢您的帮助!

Ash*_*lls 5

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

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]
}
Run Code Online (Sandbox Code Playgroud)

那么你有

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

虽然有更多的代码,但往前看,你会发现更容易看到发生了什么。

看起来你应该每天都有一个部分的日记......

override func numberOfSections(in tableView: UITableView) -> Int {
    return diaryDays.count
}
Run Code Online (Sandbox Code Playgroud)

然后每个问题一行......

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

然后配置你的手机……

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
}
Run Code Online (Sandbox Code Playgroud)

并在部分标题中显示日期...

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

    return // formatted diaryDay.date
}
Run Code Online (Sandbox Code Playgroud)