swift - 在 Swift 5 中找到使用 MVVM 处理分页 JSON 的更好方法
问题描述
目前我的项目使用结构MVVM。我有一个这样的分页 JSON:
{
"has_next": false,
"next_params": {
"limit": 10,
"offset": 10
},
"results": [
{ "id": 1, "name": "A Place" },
{ "id": 2, "name": "A Night" }
]
}
这是我的视图模型:
class LifeStoryViewModel: ObservableObject {
@Published var lifes: [Life] = []
var has_next: Bool = true
var next_params: [String:Any] = [:]
var fetching: Bool = false
func fetchLifeStories () {
let url = URL(string: STRINGURL)
URLSession.shared.dataTask(with: url!) { (data, res, err) in
DispatchQueue.main.async {
let vvv = try! JSONDecoder().decode(LifeStories.self, from: data!)
self.lifes = vvv.results
}
}.resume()
}
}
正如你们所看到的,我有一个模型 LifeStories:
struct Life: Identifiable, Codable {
var id: Int
var name: String
var description: String
var thumbnail: String
}
struct LifeStories: Codable {
var has_next: Bool
var results: [Life]
}
我可以删除LifeStories
模型并在里面处理它LifeStoryViewModel
吗?我怎么能这样做,因为我认为LifeStories
模型不是必需的。
解决方案
您可以将泛型类型用于分页响应。这是我正在开发的应用程序的一个示例:
struct PaginatedResponse<Element: Codable>: Codable {
var count: Int
var next: String?
var previous: String?
var results: [Element]
}
推荐阅读
- javascript - Javascript自定义按字符串属性排序
- python - 使用 Airflow 的 TriggerDagRunOperator 时,目标 DAG 运行被标记为“成功”,而没有完成子任务
- javascript - 为什么 node.js 中的异步函数不是异步的?
- opencv - 如何在考虑相机校准的情况下执行 2d 到 3d 重建
- javascript - 如何将点击事件传递或冒泡到另一层?
- database - 选择 Cosmos 分区键
- mysql - 是否可以禁止 MySQL 行修改?
- python - 递归导入语句
- logic - 如何使用与门和或门创建与非门?
- python - 分配/分配算法