首页 > 解决方案 > 在 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模型不是必需的。

标签: swiftswiftui

解决方案


您可以将泛型类型用于分页响应。这是我正在开发的应用程序的一个示例:

struct PaginatedResponse<Element: Codable>: Codable {
    var count: Int
    var next: String?
    var previous: String?
    var results: [Element]
}

推荐阅读