gpt4 book ai didi

swift - 处理 JSON 分页,并将数据添加到 TableView ?

转载 作者:搜寻专家 更新时间:2023-10-31 23:06:09 29 4
gpt4 key购买 nike

我收到格式为 JSON 的响应:

{
"current_page":1,
"data":[
{
"id":1,
"title":"Title 1"
},
{
"id":2,
"title":"Title 2"
},
{
"id":3,
"title":"Title 3"
}
]
}

如您所见,data 包含对象列表,在本例中为 Post 列表。这是我的 Realm/Objectmapper Post 类:

import RealmSwift
import ObjectMapper

class Post: Object, Mappable {
let id = RealmOptional<Int>()
@objc dynamic var title: String? = nil

required convenience init?(map: Map) {
self.init()
}

func mapping(map: Map) {

}
}

我创建了一个通用类(我不确定它是否写对了)来处理 Pagination 响应。我希望它是通用的,因为我有其他分页响应返回 User 而不是 Post 以及其他对象。

这是我当前的 Pagination 类:

import ObjectMapper

class Pagination<T: Mappable>: Mappable {
var data: [T]?

required convenience init?(map: Map) {
self.init()
}

func mapping(map: Map) {
data <- map["data"]
}
}

但是,我不确定我是否正确地编写了这个类。

这是我调用发送回分页数据的端点的类(我删除了不相关的代码):

var posts = [Post]()

provider.request(.getPosts(page: 1)) { result in
switch result {
case let .success(response):
do {
let json = try JSONSerialization.jsonObject(with: response.data, options: .allowFragments)

// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// Not sure what to do here to handle and retrieve the list of Posts
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

// Eventually, I need to append the posts to the variable
// self.posts.append(pagination.data)

// Reload the table view's data
self.tableView.reloadData()
} catch {
print(error)
}
case let .failure(error):
print(error)
break
}
}

如何正确处理 JSON 响应以获取 Post 列表,然后将它们附加到 var posts = [Post]() 变量?我是否需要对我的 Pagination 类进行任何更改?

最佳答案

一旦有了 json,就可以很容易地使用对象映射器解析它:

let pagination = Mapper<Pagination<Post>>().map(JSONObject: json)

还可以进一步推广,我用直接引用作为例子。您的 Pagination 类也可以保存当前页面索引值。

我认为您还缺少 Post 类中 mapping(map:) 函数的实现,它应该是这样的:

func mapping(map: Map) {
title <- map["title"]
}

关于swift - 处理 JSON 分页,并将数据添加到 TableView ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54736050/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com