我想实现一个评论系统,用户可以在其中回复其他发表评论的人。我想在嵌套的层次结构视图中显示这些注释,类似于reddit应用程序“ Apollo”的以下操作:
https://i.imgur.com/JiLLsjs.mp4
如您所见,注释以嵌套格式排序。
这是我的API响应:
{
"success": true,
"data": {
"comments": {
"data": [
{
"id": 1,
"parent_id": 0,
"depth": 0,
"message": "1",
"children_count": 2,
"children": [
{
"id": 2,
"parent_id": 1,
"depth": 1,
"message": "2",
"children_count": 1,
"children": [
{
"id": 3,
"parent_id": 2,
"depth": 2,
"message": "3",
"children_count": 0,
"children": []
}
]
},
{
"id": 4,
"parent_id": 1,
"depth": 1,
"message": "2",
"children_count": 0,
"children": []
}
]
},
{
"id": 5,
"parent_id": 0,
"depth": 0,
"message": "1",
"children_count": 0,
"children": []
}
]
}
}
}
如您所见,每个comment
对象都有一个parent_id
(父注释ID),一个depth
(基本上是层次结构中注释的“级别”),一个children_count
(直接子代的数量)和children
(子代自己评论)。
因此,我的问题是:
谢谢。
答案 0 :(得分:-1)
1-个人会使用tableView
2-这是一个递归操作,以let children: [Datum]?
为空/无结尾
// MARK: - Empty
struct Root: Codable {
let success: Bool
let data: DataClass
}
// MARK: - DataClass
struct DataClass: Codable {
let comments: Comments
}
// MARK: - Comments
struct Comments: Codable {
let data: [Datum]
}
// MARK: - Datum
struct Datum: Codable {
let id, parentID, depth: Int
let message: String
let childrenCount: Int
let children: [Datum]?
}
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let res = decoder.decode(Root.self, from:data)
3-您需要限制对评论的答复数量,因为没有屏幕宽度适合未知的答复数量,这是关于嵌套的tableView填充
4-您需要使用heightForRowAt
进行操作,否则您将需要为嵌套表进行一些计算或以更高的固定高度进行更好的固定,更容易的是在另一个单独的vc中显示嵌套的注释,例如脸书
5-根本不将多个vc相互嵌套,其数量超过2/3,而且也使用了表单元出队,这是系统自动处理的良好内存性能